PySpark SQL:合并 .withColumn 调用
PySpark SQL: consolidating .withColumn calls
我有一个 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)\
...
等
是否有更简洁的表达方式(重复的 withColumn
和 drop
调用)?
您可以在一个表达式中传递多个操作。
exprs = [udf1(col("col1")).alias("col1"),
udf2(col("col2")).alias("col2"),
...
udfn(col("coln")).alias("coln")]
然后将它们解压到 select
:
df = df.select(*exprs)
因此,采用这种方法,您将在 df
上执行这样的 udfs
,并且您将重命名结果列。请注意,我的回答几乎与 完全相同,但是问题与我的完全不同,所以这就是为什么我决定回答它而不是将其标记为重复的原因。
我有一个 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)\
...
等
是否有更简洁的表达方式(重复的 withColumn
和 drop
调用)?
您可以在一个表达式中传递多个操作。
exprs = [udf1(col("col1")).alias("col1"),
udf2(col("col2")).alias("col2"),
...
udfn(col("coln")).alias("coln")]
然后将它们解压到 select
:
df = df.select(*exprs)
因此,采用这种方法,您将在 df
上执行这样的 udfs
,并且您将重命名结果列。请注意,我的回答几乎与