如何在PySpark中将一列添加到其他列?

时间:2020-08-25 18:04:36

标签: pyspark

我有以下PySpark DataFrame,其中每一列代表一个时间序列,我想研究它们与均值的距离。

+----+----+-----+---------+
| T1 | T2 | ... | Average |
+----+----+-----+---------+
| 1  | 2  | ... |  2      |
| -1 | 5  | ... |  4      |
+----+----+-----+---------+

这就是我希望得到的:

+----+----+-----+---------+
| T1 | T2 | ... | Average |
+----+----+-----+---------+
| -1 | 0  | ... |  2      |
| -5 | 1  | ... |  4      |
+----+----+-----+---------+

到目前为止,我已经尝试过在单个列上天真地运行UDF,但是每列分别需要30s-50s-80s ...(不断增加基音),所以我可能做错了事。

cols = ["T1", "T2", ...]
for c in cols:
    df = df.withColumn(c, df[c] - df["Average"])

是否有更好的方法来完成将一列添加到其他列的转换?

1 个答案:

答案 0 :(得分:2)

使用rdd可以通过这种方式完成。

+---+---+-------+
|T1 |T2 |Average|
+---+---+-------+
|1  |2  |2      |
|-1 |5  |4      |
+---+---+-------+

df.rdd.map(lambda r: (*[r[i] - r[-1] for i in range(0, len(r) - 1)], r[-1])) \
  .toDF(df.columns).show()

+---+---+-------+
| T1| T2|Average|
+---+---+-------+
| -1|  0|      2|
| -5|  1|      4|
+---+---+-------+