浮点列上的spark sql百分位数

lymnna71  于 2021-06-24  发布在  Hive
关注(0)|答案(1)|浏览(805)

根据文档,percentile命令应该给出每个数字列的确切百分比。至少当我的输入是由浮点组成的时候-这不是真的。
在hive文档中,它表示percentile命令只对整数有效。我不理解sparksql和hive之间的关系,但是spark似乎不仅仅运行hive,否则它不会改变它的文档。还有spark的 percentile 有一个不同的签名,让它得到一个 frequency 参数,我也不知道它的用途。这是一个具有意外输出的示例:

from pyspark.sql import functions as sf

d = spark.createDataFrame([[35.138071000000004], [34.119932999999996], [34.487992]], ['a'])
d.select(sf.expr('percentile(a, array(0.25,0.5,0.75,0.9,0.95)) AS res')).collect()

Out[1]: [Row(res=[34.3039625, 34.487992, 34.8130315, 35.0080552, 35.0730631])]

如果我换了 sf.expr 满足于 percentile_approx 用高精度,或用高精度 frequency 在当前的方法中,我得到了一个合理的输出。你能解释一下发生了什么事吗?
也:
你能给我解释一下sparksql和apachehive之间的关系吗?
激发sql命令运行的代码在哪里?
谢谢

q7solyqu

q7solyqu1#

spark和hive之间没有直接的关系,除了spark能够从hive metastore中检索有关hive中定义的数据库、表和视图的元数据之外。你可以通过阅读spark的在线文档来熟悉它。
sparksql是用scala编写的sql语言的一个完全独立的实现(与hive无关)。sparksql是spark使用spark集群计算平台的模块之一。与其他spark模块一起,它可以在spark自己的集群(aka standalone)上运行,也可以使用yarn或mesos。
具体来说 percentile 根据sparksql文档在sparksql中的函数。。。
返回给定百分比下数值列列的精确百分位值。百分比的值必须介于0.0和1.0之间。频率值应为正积分。
编辑
频率参数已添加到 percentile 作为spark-18940的一部分,可以选择性地提供包含分析值分布的额外列(一般来说,表达式)。默认值为 frequency = 1L . 有一个后续的Spark-27929,将放宽要求有它作为类型长。

相关问题