PySpark SQL:整合.withColumn调用

时间:2016-08-14 01:12:23

标签: apache-spark pyspark apache-spark-sql pyspark-sql

我有一个RDD,我已经转换为Spark SQL DataFrame。我想用UDF进行大量的列转换,最终看起来像这样:

df = df.withColumn("col1", udf1(df.col1))\
       .withColumn("col2", udf2(df.col2))\
       ...
       ...
       .withColumn("newcol", udf(df.oldcol1, df.oldcol2))\
       .drop(df.oldcol1).drop(df.oldcol2)\
       ...

等。

是否有更简洁的方式来表达这一点(重复的withColumndrop来电)?

1 个答案:

答案 0 :(得分:1)

您可以在一个表达式中传递多个操作。

exprs = [udf1(col("col1")).alias("col1"),
         udf2(col("col2")).alias("col2"),
         ...
         udfn(col("coln")).alias("coln")]

然后将其解压缩到select

df = df.select(*exprs)

因此,采用这种方法,您将对udfs执行此类df,并重命名结果列。请注意,我的答案几乎与this完全相同,但问题与我的完全不同,所以这就是为什么我决定回答它而不是将其标记为重复。