如何对数据帧使用filter,count,sort,max和groupby?

时间:2018-02-05 01:03:05

标签: apache-spark pyspark pyspark-sql

我正在使用pyspark尝试使用filter,group by,sort,count和max方法来过滤数据帧中的数据。我有这个SQL选择,我试图与pyspark复制并获得相同的结果:

select lab_org, COUNT(DISTINCT lab_id) as lab, MAX(day) as frequency, SUM(total) as total FROM lab_data GROUP BY lab_org ORDER BY frequency, lab, total DESC

示例输出看起来像这样:

lab_org lab frequency   total
370     133 556         3386.78
1031    146 557         4232.12
2092    122 559         2290.54
1468    81  568         4131.73
2254    80  569         1270.35

我是pyspark的新手并且在努力从哪里开始。你能帮忙吗?

由于

1 个答案:

答案 0 :(得分:1)

检查一下。 Pyspark不支持对群组聚合的不同计数,但仍可通过以下方式获得:

df.select('lab_id').distinct().count()

除此之外,我试图接近你的问题:

new_df = df.groupby(['lab_org']).agg({'lab_id':'count', 'frequency':'max', 'total':'sum'}).orderBy(['max(frequency)', 'count(lab_id)', 'sum(total)'])
new_df.show()