【发布时间】:2020-03-24 18:11:11
【问题描述】:
给定如下表格:
+--+------------------+-----------+
|id| diagnosis_age| diagnosis|
+--+------------------+-----------+
| 1|2.1843037179180302| 315.320000|
| 1| 2.80033330216659| 315.320000|
| 1| 2.8222365762732| 315.320000|
| 1| 5.64822705794013| 325.320000|
| 1| 5.686557787521759| 335.320000|
| 2| 5.70572315231258| 315.320000|
| 2| 5.724888517103389| 315.320000|
| 3| 5.744053881894209| 315.320000|
| 3|5.7604813374292005| 315.320000|
| 3| 5.77993740687426| 315.320000|
+--+------------------+-----------+
我试图通过仅考虑每个 id 诊断年龄最小的诊断来减少每个 id 的记录数量。在 SQL 中,您可以将表连接到自身,例如:
SELECT a.id, a.diagnosis_age, a.diagnosis
FROM tbl1 a
INNER JOIN
(SELECT id, MIN(diagnosis_age) AS min_diagnosis_age
FROM tbl1
GROUP BY id) b
ON b.id = a.id
WHERE b.min_diagnosis_age = a.diagnosis_age
如果是 rdd,你可以这样做:
rdd.map(lambda x: (x["id"], [(x["diagnosis_age"], x["diagnosis"])]))\
.reduceByKey(lambda x, y: x + y)\
.map(lambda x: (x[0], [i for i in x[1] if i[0] == min(x[1])[0]]))
您将如何仅使用 spark 数据帧操作来实现相同的目标?如果这是可能的?特别是没有 sql/rdd 操作。
谢谢
【问题讨论】:
标签: dataframe filter pyspark conditional-statements