2016-10-26 5 views
0

Я хочу, чтобы вычислить частоту 2 полевых комбинаций в свинью:Свинья: частота Граф нескольких колонок

------ y1 has the fields ----- 
a1 = GROUP y1 BY (user_id, tweet_created_at); 
a2 = FOREACH a1 GENERATE group AS (user_id, tweet_created_at), COUNT(y1) AS number_of_replies_by_user; 
a3 = FOREACH a2 GENERATE user_id, tweet_created_at, number_of_replies_by_user; 
a4 = JOIN y1 BY (user_id, tweet_created_at) LEFT OUTER, a3 BY (user_id, tweet_created_at); 

В приведенном выше, я хочу, чтобы вычислить частоту комбинации (user_id, tweet_created_at) полей.

Линия a2 = FOREACH a1 GENERATE group AS (user_id, tweet_created_at), COUNT(y1) AS number_of_replies_by_user; выдает ошибку: Incompatable schema: left is "user_id:NULL,tweet_created_at:NULL", right is "group:tuple(user_id:bytearray,tweet_created_at:bytearray)"

Я попытался без скобок: a2 = FOREACH a1 GENERATE group AS user_id, tweet_created_at, COUNT(y1) AS number_of_replies_by_user;

я получаю другую ошибку:

Invalid field projection. Projected field [tweet_created_at] does not exist in schema:.................. 

является то, что синтаксическая ошибка или проблема с моим данным ? Каков правильный путь, если это синтаксическая ошибка?

Вкратце: Я хочу рассчитать количество ответов, предоставленных пользователем во время каждого опубликованного твита. (Если он отправил 2 твита в тот же день, у него может быть ответный счет 10 во время первого твита и 15 во время второго). Я думаю, если я не буду группироваться по tweet_created_at, количество ответов будет постоянной во всех случаях, что неверно.

ответ

2

Использование FLATTEN на группе unnest кортеж в полях

a2 = FOREACH a1 GENERATE FLATTEN(group) AS (user_id, tweet_created_at), COUNT(y1) AS number_of_replies_by_user; 
+0

работал. Благодаря! – kskp

Смежные вопросы