我的HDFS中有大约4个演出的JSON,我使用JSON Serde创建了一个Hive表。最终数据预计约为25GB。
该表有10列,全部为int。我需要计算每个细胞的百分位数等级。并在每列的单独列中插入。 所以我的最终结果将是:
col1 col2 col3 .... col10 perCol1 perCol2 ... perCol10
100 200 123 423 82.44 58.22 18.42
因此18.42
中perCol10
423
col10
相对于整个col10
cume_dist
的百分位数。
以前,我在内存中使用NumPy数组执行相同的(更小)数据集。但是对于HiveQL和数据库一般都是新手,我真的不知道从哪里开始,所以任何帮助或指针都会受到赞赏!
从一些初步研究来看,{{1}}似乎很有意义,但我无法理解如何在我的用例中使用它。
非常感谢。
答案 0 :(得分:0)
百分位数是Hive中的直接函数...但百分位数是针对连续分布计算的...对于离散分布...我有一个简单的查询....
sort_array(collect_list(cast(Tx_fragment_count AS DECIMAL(10,2))))[cast(floor(size(collect_list(Tx_fragment_count))* 95/100)as int)] AS {\rtf1\ansi\ansicpg1252\deff0{\fonttbl{\f0\fnil\fcharset0 Microsoft Sans Serif;}}
\viewkind4\uc1\pard\lang1031\f0\fs17\par
\v SectionHeader-PowerMatrixConfiguration:\b\v0 Power Matrix Configuration:\b0\line On OPTOLYZER(01), MESSTECHNIK(02), CCE(03)\line Var On BLUERAYDRIVE(04), HU(05), FU(06), TUNERBOX(07), SOUND(08), SOUND2(09), PASS(10), KOMBI(11), DISPLAYS(12)\line \'a6 \'a6 \line \'a6 +- electrical wakeup line\line +----- Voltage source\line\line\line\par
}
以上查询将计算95%的值....对于列Tx_fragment_count,即字符串列