Nik*_*wal 3 python apache-spark apache-spark-sql pyspark
在我的数据框中,我有一个年龄列。总行数约为 770 亿行。我想使用 PySpark 计算该列的分位数值。我有一些代码,但计算时间很大(也许我的过程很糟糕)。
有什么好的方法可以改善这个情况吗?
数据框示例:
id age
1 18
2 32
3 54
4 63
5 42
6 23
Run Code Online (Sandbox Code Playgroud)
到目前为止我所做的:
#Summary stats
df.describe('age').show()
#For Quantile values
x5 = df.approxQuantile("age", [0.5], 0)
x25 = df.approxQuantile("age", [0.25], 0)
x75 = df.approxQuantile("age", [0.75], 0)
Run Code Online (Sandbox Code Playgroud)
第一个改进是同时进行所有分位数计算:
\n\nquantiles = df.approxQuantile("age", [0.25, 0.5, 0.75], 0)\nRun Code Online (Sandbox Code Playgroud)\n\n另请注意,您使用分位数的精确计算。从文档中我们可以看到(重点是我添加的):
\n\n\n\n\nrelativeError \xe2\x80\x93 要达到的相对目标精度 (>= 0)。如果设置为零,则会计算精确的分位数,这可能会非常昂贵。请注意,接受大于 1 的值,但给出的结果与 1 相同。
\n
由于您有一个非常大的数据帧,我希望这些计算中存在一些错误是可以接受的,但这将是速度和精度之间的权衡(尽管任何大于 0 的值都可能会显着提高速度)。
\n| 归档时间: |
|
| 查看次数: |
13008 次 |
| 最近记录: |