2017-08-17 73 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)) : _*) 
相關問題