通过解析Scala Spark中的表达式以编程方式创建新列

时间:2018-12-19 08:08:37

标签: scala apache-spark

var c1 = "column1"
var c2 = "column2"
var c3 = "column3"
var exprs = "c1*c2+c3"

var df2 = df.withColumn("target_col",expr(exprs))

其中c1 c2 c3是df中的列

此代码引发错误-有没有办法做到这一点? exprs可以更改。

2 个答案:

答案 0 :(得分:3)

要使其成为可能,您需要按以下方式使用字符串插值

val c1 = "column1"
val c2 = "column2"
val c3 = "column3"
val exprs = s"$c1*$c2+$c3"

val df2 = df.withColumn("target_col",expr(exprs))

答案 1 :(得分:0)

您会收到错误消息,因为在初始化exprs而不是使用c1,c2,c3的值时,您正在创建一个新的字符串c1*c2+c3。由于列c1*c2+c3不存在,因此出现错误。 您可以使用string interpolation来构造exprs

val exprs = s"$c1*$c2+$c3"

然后在withColumn中使用此exprs。

val df = df.withColumn("target_col",expr(exprs)).

我还建议您改用valvar