2014-09-08 3 views
-1

я использую Hadoop с водослива, улья и дб дерби у меня есть данные твиттер, чтобы Hadoop в JSon формиата работает отлично теперь мне нужно объединить данные в соответствии с пользовательскими твитов какулей запрос для сбора щебет данных для каждого пользователя

данных

{user_id:12,text:"abcd"} 
{user_id:13,text:"dcba"} 
{user_id:12,text:"efjh"} 
{user_id:13,text:"hjfe"} 

мне нужно привести как этот

{user_id:12 , tweets:["abcd","efjh"]} 
{user_id:13 , tweets:["dcba","hjfe"]} 

мой улей стол выглядеть

CREATE EXTERNAL TABLE IF NOT EXISTS tweets (
created_at INT, 
id STRING, 
id_str STRING, 
source STRING, 
text STRING, 
retweet_count INT, 
favorite_count INT, 
user_id INT, 
user_id_str STRING, 
user_name STRING, 
user_screen_name STRING, 
user_location STRING, 
user_url STRING, 
user_description STRING, 
user_protected boolean, 
user_followers_count INT, 
user_friends_count INT, 
user_listed_count INT, 
user_statuses_count INT, 
user_created_at INT, 
user_favourites_count INT, 
user_utc_offset INT, 
user_lang STRING, 
user_time_zone STRING, 
user_geo_enabled boolean, 
user_verified boolean 
) 
ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.JsonSerde' 
LOCATION '/user/data/twitter'; 

мне нужны только два поля как выход, как в моем требуемой выходной например

{user_id:12 , tweets:["abcd","efjh"]} 
{user_id:13 , tweets:["dcba","hjfe"]} 

также это нужно в формате файла

Примечание: Выход в формате JSON не является обязательным

спасибо!

ответ

0

я нашел решение для этого вопроса:

улья, имеющий список функций, изменивших свой результат запроса в приведенном выше вопросе случае я нашел улее функции, которые отвечают требуемому выходной вопрос.

имя функции collect_set().

пример использования этой функции:

SELECT user_id , collect_set(text) FROM tweets GROUP BY user_id; 

Результат:

user_id  text 
user_id:12 ["abcd","efjh"] 
user_id:13 ["dcba","hjfe"] 
Смежные вопросы