如何使用pyspark percentage_approx来获取列的中位数并将其单独保存为一个值?

xhv8bpkk  于 2023-02-11  发布在  Spark
关注(0)|答案(1)|浏览(183)

我想得到total_amount列的中位数并保存起来以备将来使用,这是我的数据集:

+------------+------------+-------------+---------------+------------+
|PULocationID|DOLocationID|trip_distance|passenger_count|total_amount|
+------------+------------+-------------+---------------+------------+
|          90|          68|          0.8|            1.0|         8.8|
|         113|          90|          0.9|            1.0|         8.8|
|          88|         232|          2.8|            1.0|        13.8|
|          79|         249|          1.4|            1.0|        12.3|
|         142|         238|          2.0|            0.0|        12.3|
|         114|          90|          1.6|            1.0|        12.8|
|          90|         144|          1.8|            1.0|        13.3|
|         114|          48|          2.0|            1.0|       14.75|
|          48|         152|          5.7|            1.0|        22.3|
|         234|         148|          1.8|            1.0|       14.75|
|          79|         141|          3.5|            2.0|        17.3|

我的密码是

processed.sort(processed.total_amount.asc())
processed.show()

median = FN.expr("percentile_approx(total_amount, 0.5, 1000000)")

print(median)

然而,它给我的感觉是:

Column<'percentile_approx(total_amount, 0.5, 1000000)'>

似乎根本没有计算中位数
我也试过:

processed.agg(FN.expr("percentile_approx('total_amount', 0.5, 10000)")).show()

其中结果为空

0pizxfdo

0pizxfdo1#

可以使用agg函数计算列的中位数:

median = df.agg(expr("percentile_approx(total_amount, 0.5)")).collect()[0][0]
print("The median is: ", median)
df = df.withColumn("median", lit(median))

相关问题