2017-08-17 95 views
1

我有5列要添加到数据框中。 (A - E)这些列的值存储在(a - e)变量中。如何创建一个Pyspark UDF用于将新列添加到数据框中

而不是使用

df.withColumn("A", a).withColumn("B", b).withColumn..... etc 

的,我们能做到这一点有一个UDF?

目前我点名功能:

 def add_col(df_name,newCol,value): 
     df = df_name 
     df = df.withColumn(newCol, value) 
     return df 

但我无法理解如何将其转换为UDF并使用它。请帮忙。

+2

的UDF不能产生超过1列...但你可以返回一个复杂的列(数组或结构类型)。但显然你正在使用常量(字面值),所以我没有看到使用UDF –

回答

1

如果你想添加就可以使用select多列与*

df.select("*", some_column, another_column, ...) 
+0

如何在同一步骤中插入值? – Viv

1

你不应该使用UDF,他们不能创建多个结果。

但是你可以写在对方的回答类似这样的SELECT语句:

df.select(col("*"), lit(a).as("a"), lit(b).as("b"), ...) 

您也可以自动完成这一补充说:

val fieldsMap = Map("a" -> a, "b" -> b) 
df.select(Array(col("*")) ++ fieldsMap.map(e => lit(e._2).as(e._1)) : _*) 
相关问题