【发布时间】:2020-04-24 14:35:07
【问题描述】:
我有一个 PySpark 数据框 (df),其中有一列包含两个元素的列表。列表中的两个元素不按升序或降序排序。
+--------+----------+-------+
| version| timestamp| list |
+--------+-----+----|-------+
| v1 |2012-01-10| [5,2] |
| v1 |2012-01-11| [2,5] |
| v1 |2012-01-12| [3,2] |
| v2 |2012-01-12| [2,3] |
| v2 |2012-01-11| [1,2] |
| v2 |2012-01-13| [2,1] |
+--------+----------+-------+
我想在列表的第一个和第二个元素之间获取差异,并将其作为另一列 (diff)。这是我想要的输出示例。
+--------+----------+-------+-------+
| version| timestamp| list | diff |
+--------+-----+----|-------+-------+
| v1 |2012-01-10| [5,2] | 3 |
| v1 |2012-01-11| [2,5] | -3 |
| v1 |2012-01-12| [3,2] | 1 |
| v2 |2012-01-12| [2,3] | -1 |
| v2 |2012-01-11| [1,2] | -1 |
| v2 |2012-01-13| [2,1] | 1 |
+--------+----------+-------+-------+
如何使用 PySpark 做到这一点?
我尝试了以下方法:
transform_expr = (
"transform(diff, x-y ->"
+ "x as list[0], y as list[1])"
)
df = df.withColumn("diff", F.expr(transform_expr))
但是,上述技术没有给我任何输出。
我也愿意使用 UDF 来获得我想要的输出,以防万一需要。
欢迎使用没有 UDF 的方法和基于 UDF 的方法。谢谢。
【问题讨论】:
标签: python pandas apache-spark pyspark