hive查询以收集每个用户的Twitter数据

时间:2014-09-08 08:07:24

标签: hadoop twitter hive

我正在使用hadoop with flume,hive和db derby我将twitter数据输入到json formate中的hadoop 工作正常现在我需要根据用户推文组合数据,如

数据

{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"]}

我的hive表看起来像

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格式不是必需的

谢谢!

1 个答案:

答案 0 :(得分:0)

我找到了这个问题的解决方案:

hive在上面的问题案例中有一个修改了你的查询结果的函数列表我找到了一个符合所需问题输出的hive函数。

函数名称为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"]