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可以更改。
答案 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)).
我还建议您改用val
或var
。