2017-08-30 36 views
-1

创造name_tab的:的n-gram没有蜂巢话单

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

Insert语句:

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

name_tab_new的创作:

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

Insert语句:

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中工作。它按国家创建ngrams。 问题:对于一个国家,此ngram {aa, bb, cc}与此ngram {bb, aa, cc}之间存在差异。

我想要一个解决方案,这些单词命令并不重要。对于一个国家,我不想在{aa, bb, cc}{bb, aa, cc}之间分歧。我只想要其中的一个。

非常感谢您

结果例如:

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

英格兰,桌子,椅子,工具,54

英格兰,三明治,面包,果汁,32

意大利,海,罗姆人,Coliseo,47 *

其实,我想的是:

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

英格兰,桌子,椅子,工具,54

意大利,海,罗马,COLISEO, 47 *

我希望在ngrams函数中有一个选项不考虑顺序。

在表bdd中,变量“var2”是由blanck分隔的几个单词的列表。

在表name_tab,我们有:

第一行 英格兰,{ “NGRAM”: “面包”, “三明治”, “果汁”], “estfrequency”:120.0},{ “ngram”:[“desk”,“chair”,“tool”],“estfrequency”:54.0},{“ngram”:[“sandwich”,“bread”,“juice”],“estfrequency”

下联 意大利,{ “的ngram”:[ “海”, “罗马”, “COLISEO”], “estfrequency”:47。0}

+0

你的问题并不清楚,提供包括所需的结果的数据样本。 –

+0

我有一个例子。谢谢 – Camel

+0

我没有看到这个例子与这篇文章的关系 –

回答

0

演示

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   | 
+-----------+--------------+ 
+0

Dudu。我把变量国家放在哪里。它不起作用,当我把它放在组中时, – Camel

+0

'mycol'等同于'var2' –

+0

当然。但是我想通过变量“country”进行分组 – Camel