2017-08-30 29 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