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' 等

的位置