Hive for bag of words(字典中每个单词的字数)
Hive for bag of words (word count for each word in the dictionary)
我有一个 table 这种结构:
user_id | message_id | content
1 | 1 | "I like cats"
1 | 1 | "I like dogs"
以及dictionary.txt
(或外部配置单元table)中的有效单词列表,例如:
I,like,dogs,cats,lemurs
我的目标是为每个用户table生成一个字数
user_id | "I" | "like" | "dogs" | "cats" | "lemurs"
1 | 2 | 2 | 1 | 1 | 0
这是我到目前为止尝试过的:
SELECT user_id, word, COUNT(*)
FROM messages LATERAL VIEW explode(split(content, ' ')) lTable as word
GROUP BY user_id,word;
我不太熟悉在 Hive 上执行 Pivot,但在 pig 中可以执行。
DEFINE GET_WORDCOUNTS com.Whosebug.pig.GetWordCounts('$dictionary_path');
A = LOAD .... AS user_id, message_id, content;
C = GROUP B BY (user_id);
D = FOREACH C GENERATE group, FLATTEN(GET_WORDCOUNTS(B.content));
您将必须编写一个简单的 UDF GetWordCounts
,它为每个分组记录标记您的输入内容,并检查输入字典。
检查这个:
select ename,
length(ename)-length(replace(ename,'A', '')) A,
length(ename)-length(replace(ename,'W', '')) W
FROM EMP;
否则您可以定义一个变量(您的搜索字符串)并将其放置在 'A'、'W' 等
的位置
我有一个 table 这种结构:
user_id | message_id | content
1 | 1 | "I like cats"
1 | 1 | "I like dogs"
以及dictionary.txt
(或外部配置单元table)中的有效单词列表,例如:
I,like,dogs,cats,lemurs
我的目标是为每个用户table生成一个字数
user_id | "I" | "like" | "dogs" | "cats" | "lemurs"
1 | 2 | 2 | 1 | 1 | 0
这是我到目前为止尝试过的:
SELECT user_id, word, COUNT(*)
FROM messages LATERAL VIEW explode(split(content, ' ')) lTable as word
GROUP BY user_id,word;
我不太熟悉在 Hive 上执行 Pivot,但在 pig 中可以执行。
DEFINE GET_WORDCOUNTS com.Whosebug.pig.GetWordCounts('$dictionary_path');
A = LOAD .... AS user_id, message_id, content;
C = GROUP B BY (user_id);
D = FOREACH C GENERATE group, FLATTEN(GET_WORDCOUNTS(B.content));
您将必须编写一个简单的 UDF GetWordCounts
,它为每个分组记录标记您的输入内容,并检查输入字典。
检查这个:
select ename,
length(ename)-length(replace(ename,'A', '')) A,
length(ename)-length(replace(ename,'W', '')) W
FROM EMP;
否则您可以定义一个变量(您的搜索字符串)并将其放置在 'A'、'W' 等
的位置