目前,我正在使用PySpark分析一些数据。我有一个包含工资数据的CSV文件。我想知道什么工作的工资最高。为此,我需要中位数(),因为我想知道平均值。
Pyspark中groupBy
的方法如下:第一个月第一次
当我尝试.mean()
方法时,它看起来像这样:
mean_pay_data = reduced_data.groupBy("JOB_TITLE").mean("REGULAR_PAY")
mean_pay_data.show(3)
# +--------------------+-----------------+
# | JOB_TITLE| avg(REGULAR_PAY)|
# +--------------------+-----------------+
# |SENIOR SECURITY O...|59818.79285751433|
# |SENIOR TRAFFIC SU...| 72116.8394540951|
# |AIR CONDITIONING ...|98415.21726190476|
# +--------------------+-----------------+
以下是使用.avg()
方法时的外观:
average_pay_data = reduced_data.groupBy("JOB_TITLE").avg("REGULAR_PAY")
average_pay_data.show(3)
# +--------------------+-----------------+
# | JOB_TITLE| avg(REGULAR_PAY)|
# +--------------------+-----------------+
# |SENIOR SECURITY O...|59818.79285751433|
# |SENIOR TRAFFIC SU...| 72116.8394540951|
# |AIR CONDITIONING ...|98415.21726190476|
# +--------------------+-----------------+
它们返回完全相同的值。mean()
和avg()
有什么区别?
我还想找到中位数,这样一个人就不会有太大的影响。由于PySpark中没有 median()
方法,我不知道这里该怎么做。
1条答案
按热度按时间jxct1oxe1#
avg
和mean
文档都说明了这一点:mean()
是avg()
的别名这两个函数是相同的。两个名称都是需要的,这样来自不同背景的开发人员会感到舒服。
关于中位数:
F.expr('percentile_approx(col_name, .5) over()')
F.expr('percentile(col_name, .5) over()')