복붙노트

[HADOOP] 문자 메시지에서 문자열의 돼지 수 발생

HADOOP

문자 메시지에서 문자열의 돼지 수 발생

venues.csv와 tweets.csv라는 두 개의 파일이 있습니다. 각 장소에 대해 트윗 파일의 트윗 메시지에 발생하는 횟수를 계산합니다.

HCatalog에서 csv 파일을 가져 왔습니다.

지금까지 내가 할 수 있었던 것 :

어떻게 텍스트 필드를 필터링하고 '셸'트윗 메시지가 포함 된 튜플을 얻는 지 압니다. 나는 하드 캡슐화 된 Shell을 사용하지 않고 동일한 작업을 수행하려고합니다. 대신 venuesNames 가방의 각 이름을 사용하십시오. 어떻게해야합니까? 또한 어떻게 생성 명령을 사용하여 카운트 결과를 경기장 이름과 일치시키는 새 가방을 생성 할 수 있습니까?

a = LOAD 'venues_test_1' USING org.apache.hcatalog.pig.HCatLoader();
b = LOAD 'tweets_test_1' USING org.apache.hcatalog.pig.HCatLoader();

venuesNames = foreach a generate name;

countX = FILTER b BY (text matches '.*Shell.*');

venueToCount = generate ('Shell' as venue, COUNT(countX) as countVenues); 

DUMP venueToCount;

사용중인 파일은 다음과 같습니다.

tweets.csv

created_at,text,location
Sat Nov 03 13:31:07 +0000 2012, Sugar rush dfsudfhsu, Glasgow
Sat Nov 03 13:31:07 +0000 2012, Sugar rush ;dfsosjfd HAHAHHAHA, London
Sat Apr 25 04:08:47 +0000 2009, at Sugar rush dfjiushfudshf, Glasgow
Thu Feb 07 21:32:21 +0000 2013, Shell gggg, Glasgow
Tue Oct 30 17:34:41 +0000 2012, Shell dsiodshfdsf, Edinburgh
Sun Mar 03 14:37:14 +0000 2013, Shell wowowoo, Glasgow
Mon Jun 18 07:57:23 +0000 2012, Shell dsfdsfds, Glasgow
Tue Jun 25 16:52:33 +0000 2013, Shell dsfdsfdsfdsf, Glasgow

venues.csv

city,name
Glasgow, Sugar rush
Glasgow, ABC
Glasgow, University of Glasgow
Edinburgh, Shell
London, Big Ben

나는 이것들이 기본적인 질문이라는 것을 알고 있습니다. 그러나 저는 돼지와 함께 시작하고 있습니다. 그리고 어떤 도움도 감사 할 것입니다!

해결법

  1. ==============================

    1.나는 당신의 회장 이름 목록이 유일하다고 생각합니다. 그렇지 않다면 어쨌든 더 많은 문제가 있습니다. 왜냐하면 어느 도시가 (아마도 도시 지역을 참조하여) 어떤 장소에 대해 말하고 있는지 명확히해야하기 때문입니다. 그러나 그 잠재적 인 합병증을 무시하면 다음과 같이 할 수 있습니다.

    나는 당신의 회장 이름 목록이 유일하다고 생각합니다. 그렇지 않다면 어쨌든 더 많은 문제가 있습니다. 왜냐하면 어느 도시가 (아마도 도시 지역을 참조하여) 어떤 장소에 대해 말하고 있는지 명확히해야하기 때문입니다. 그러나 그 잠재적 인 합병증을 무시하면 다음과 같이 할 수 있습니다.

    퍼지 조인을 설명했습니다. Pig에서 표준 값을 포함하도록 레코드를 강제 변환 할 방법이없는 경우 (이 경우 UDF를 사용하지 않고) CROSS 연산자를 사용해야합니다. M과 N 레코드와 두 개의 릴레이션을 횡단하면 그 결과는 시스템이 처리 할 수있는 것보다 많은 M * N 레코드와의 관계가되므로주의해서 사용해야합니다.

    일반적인 전략은 1) CROSS 두 관계, 2) 각 레코드에 대한 사용자 지정 정규식 만들기 * 및 3) 정규식을 통과하는 필터를 필터링합니다.

    venues = LOAD 'venues_test_1' USING org.apache.hcatalog.pig.HCatLoader();
    tweets = LOAD 'tweets_test_1' USING org.apache.hcatalog.pig.HCatLoader();
    
    /* Create the Cartesian product of venues and tweets */
    crossed = CROSS venues, tweets;
    /* For each record, create a regex like '.*name.*'
    regexes = FOREACH crossed GENERATE *, CONCAT('.*', CONCAT(venues::name, '.*')) AS regex;
    /* Keep tweet-venue pairs where the tweet contains the venue name /*
    venueMentions = FILTER regexes BY text MATCHES regex;
    
    venueCounts = FOREACH (GROUP venueMentions BY venues::name) GENERATE group, COUNT($1);
    

    짹짹이 여러 장소를 언급하는 경우 모든 venueCounts의 합계는 짹짹 이상의 수 있습니다.

    * 자바 정규 표현식에 특별한 해석이있는 문자가 해당 장소 이름에 포함되어 있으면이 기술을 약간주의해야합니다. 따라서 이스케이프 처리해야합니다.

  2. from https://stackoverflow.com/questions/19823161/pig-count-occurrence-of-strings-in-text-messages by cc-by-sa and MIT license