2014-02-24 183 views
1

我是新的蜂巢,我试图计数distinct word_values从我整个单词列。配置单元映射数组映射

id --------------------------- words
435400064446779392 [{“words_value”:“i”,“words_id”: “1”},{“words_value”:“hate”,“words_id”:“2”}]

请注意,单词列是一个数组。我有更多的行,但以上是示例。 我曾尝试:

SELECT words.words_value,count(words.words_value) from T1 GROUP BY words.words_value WITH ROLLUP;

但它在每行计数。 有没有人有任何想法?

回答

1

爆炸UDTF对于将嵌套数据结构转换为普通SQL语句的普通表格非常有用。既然你有一个地图阵列,你需要使用两次爆炸。

select count(distinct value) from 
    (select explode(col) from 
      (select explode(words) from mytable) subquery1 
    ) subquery2 
where 
    key = "words_value"; 
+0

好的,谢谢卡特尚克林。我设法得到一个更简单的格式;现在看起来是这样的: {“id”:“435400146256293888”,“word_id”:1,“word_value”:“@ WOWFakta:”} {“id”:“435400146256293888”,“word_id”:2,“word_value “:”Mengonsumsi“} {”id“:”435400146256293888“,”word_id“:3,”word_value“:”secangkir“} {”id“:”435400146256293888“,”word_id“:4,”word_value“: “酸奶”} 这代表了一个记录,我有这些20.000。 现在我想要计算每行的特定单词。例如: id | word | count => 435400146256293888 |酸奶| 1 你有什么线索吗? – Xorsist

+0

使用简单的地图,您可以选择单词[“id”],单词[“word_value”] –