我正在使用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的新手并且在努力从哪里开始。你能帮忙吗?
由于
答案 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()