如何在spark scala中通过数据框动态调用withColumn函数
How to call withColumn function dynamically over dataframe in spark scala
这在 spark-scala 中可行吗?我正在使用 spark 2.2
val func="""withColumn("seq", lit("this is seq"))
.withColumn("id", lit("this is id"))
.withColumn("type", lit("this is type"))"""
然后像这样在数据帧 (df) 之上使用上述变量
val df2=df.$func
我将这些函数保存到变量中的原因是我想根据条件动态应用函数。有时我可能需要 1 个 withColumn 函数,有时我可能需要多个 withColumn 函数。
感谢任何帮助。谢谢!
如果我没理解错的话,你可以使用foldLeft
假设你有一个 dataframe
df as
val df: DataFrame = Seq(("123"), ("123"), ("223"), ("223")).toDF()
您可以创建一个 list
的列名和 operation/function 您称之为
val list = List(
("seq", lit("this is seq")),
("id", lit("this is id")),
("type" , lit("thisis type"))
)
现在您可以使用 foldLeft
将此列表用作
list.foldLeft(df){(tempDF, listValue) =>
tempDF.withColumn(listValue._1, listValue._2)
}
更好的解决方案是从上面的值列表和数据框中的列创建一个 select 语句,如下所示
val columns = df.columns.map(col) ++ list.map(r => r._2 as r._1)
最终结果:
+-----+-----------+----------+-----------+
|value|seq |id |type |
+-----+-----------+----------+-----------+
|123 |this is seq|this is id|thisis type|
|123 |this is seq|this is id|thisis type|
|223 |this is seq|this is id|thisis type|
|223 |this is seq|this is id|thisis type|
+-----+-----------+----------+-----------+
希望对您有所帮助!
这在 spark-scala 中可行吗?我正在使用 spark 2.2
val func="""withColumn("seq", lit("this is seq"))
.withColumn("id", lit("this is id"))
.withColumn("type", lit("this is type"))"""
然后像这样在数据帧 (df) 之上使用上述变量
val df2=df.$func
我将这些函数保存到变量中的原因是我想根据条件动态应用函数。有时我可能需要 1 个 withColumn 函数,有时我可能需要多个 withColumn 函数。
感谢任何帮助。谢谢!
如果我没理解错的话,你可以使用foldLeft
假设你有一个 dataframe
df as
val df: DataFrame = Seq(("123"), ("123"), ("223"), ("223")).toDF()
您可以创建一个 list
的列名和 operation/function 您称之为
val list = List(
("seq", lit("this is seq")),
("id", lit("this is id")),
("type" , lit("thisis type"))
)
现在您可以使用 foldLeft
将此列表用作
list.foldLeft(df){(tempDF, listValue) =>
tempDF.withColumn(listValue._1, listValue._2)
}
更好的解决方案是从上面的值列表和数据框中的列创建一个 select 语句,如下所示
val columns = df.columns.map(col) ++ list.map(r => r._2 as r._1)
最终结果:
+-----+-----------+----------+-----------+
|value|seq |id |type |
+-----+-----------+----------+-----------+
|123 |this is seq|this is id|thisis type|
|123 |this is seq|this is id|thisis type|
|223 |this is seq|this is id|thisis type|
|223 |this is seq|this is id|thisis type|
+-----+-----------+----------+-----------+
希望对您有所帮助!