Hive中没有单词顺序的爆炸图

gpnt7bae  于 2021-06-26  发布在  Hive
关注(0)|答案(1)|浏览(351)

创建名称选项卡:

CREATE TABLE name_tab (country string,
new_item ARRAY<STRUCT<ngram:array<string>,
estfrequency:double>>);

插入语句:

INSERT OVERWRITE TABLE name_tab
SELECT country, ngrams(sentences(var2),3,100) as word_map
FROM bdd 
GROUP BY country;

创建名称\u选项卡\u新建:

CREATE TABLE name_tab_new (country string, ngram1 string, ngram2 string,  ngram3 string, estfrequency double);

插入语句:

INSERT OVERWRITE TABLE name_tab_new
SELECT country , X.ngram[0], X.ngram[1], X.ngram[2], X.estfrequency
FROM name_tab
LATERAL VIEW explode(new_item) Z as X;

这些请求在Hive中起作用。它按国家创建ngram。问题是:对于一个国家来说,这个ngram是有区别的 {aa, bb, cc} 还有这个ngram {bb, aa, cc} .
我想要一个文字顺序无关紧要的解决方案。对于一个国家,我不想有任何差别é之间的关系 {aa, bb, cc} 以及 {bb, aa, cc} . 我只想要一个。
非常感谢你
结果示例:

  • 英格兰,面包,三明治,果汁,120

英格兰,table,椅子,工具,54
英格兰,三明治,面包,果汁,32
意大利,海洋,罗马,科利塞,47*
实际上,我想要:

  • 英格兰,面包,三明治,果汁,152

英格兰,table,椅子,工具,54
意大利,海洋,罗马,科利塞,47*
我希望ngrams函数中有一个不考虑订单的选项。
在表bdd中,变量“var2”是由几个单词组成的列表,用blank分隔。
在“表名”选项卡中,我们有:
英国一线,{“ngram”:[“面包”,“三明治”,“果汁”],“estfrequency”:120.0},{“ngram”:[“table”,“椅子”,“工具”],“estfrequency”:54.0},{“ngram”:[“三明治”,“面包”,“果汁”],“estfrequency”:32.0}
第二行意大利,{“ngram”:[“sea”,“roma”,“coliseo”],“estfrequency”:47.0}

7uhlpewt

7uhlpewt1#

演示

with t as (select 'a  b a c c a b b a a a a c c b c a b c a b' as mycol)

select      sort_array(e.ngram) as ngram
           ,sum(e.estfrequency) as estfrequency

from       (select  explode(ngrams(sentences(mycol),2,1000)) e

            from    t
            ) t

group by    sort_array(e.ngram)
;
+-----------+--------------+
|   ngram   | estfrequency |
+-----------+--------------+
| ["a","a"] | 3.0          |
| ["a","b"] | 6.0          |
| ["a","c"] | 5.0          |
| ["b","b"] | 1.0          |
| ["b","c"] | 3.0          |
| ["c","c"] | 2.0          |
+-----------+--------------+

相关问题