如何在pyspark中找到中值

svujldwt  于 2021-07-14  发布在  Spark
关注(0)|答案(1)|浏览(438)

以下是我的日期框的值:

+-------+----------+
|     ID| Date_Desc|
+-------+----------+
|8951354|2012-12-31|
|8951141|2012-12-31|
|8952745|2012-12-31|
|8952223|2012-12-31|
|8951608|2012-12-31|
|8950793|2012-12-31|
|8950760|2012-12-31|
|8951611|2012-12-31|
|8951802|2012-12-31|
|8950706|2012-12-31|
|8951585|2012-12-31|
|8951230|2012-12-31|
|8955530|2012-12-31|
|8950570|2012-12-31|
|8954231|2012-12-31|
|8950703|2012-12-31|
|8954418|2012-12-31|
|8951685|2012-12-31|
|8950586|2012-12-31|
|8951367|2012-12-31|
+-------+----------+

我尝试在pyspark中创建日期列的中值:

df1 = df1.groupby('Date_Desc').agg(f.expr('percentile(ID, array(0.25))')[0].alias('%25'),
                             f.expr('percentile(ID, array(0.50))')[0].alias('%50'),
                             f.expr('percentile(ID, array(0.75))')[0].alias('%75'))

但我发现这是个错误:
py4jjavaerror:调用o198.showstring时出错:org.apache.spark.sparkexception:作业因阶段失败而中止:阶段29.0中的任务1失败1次,最近的失败:阶段29.0中的任务1.0丢失(tid 427,5bddc80133f,executor driver):org.apache.spark.sparkupgradeexception:由于spark 3.0的升级,您可能会得到不同的结果:无法在新解析器中解析'11/23/04 9:00'。您可以将spark.sql.legacy.timeparserpolicy设置为legacy以恢复spark 3.0之前的行为,或者设置为corrected并将其视为无效的日期时间字符串。

wfypjpf4

wfypjpf41#

带Spark≥ 3.1.0 :

from pyspark.sql.functions import percentile_approx

df1.groupBy("Date_Desc").agg(percentile_approx("ID", 0.5).alias("%50"))

相关问题