我将使用表达式向数据框添加新列。 例如,我有一个数据框
+-----+----------+----------+-----+
| C1 | C2 | C3 |C4 |
+-----+----------+----------+-----+
|steak|1 |1 | 150|
|steak|2 |2 | 180|
| fish|3 |3 | 100|
+-----+----------+----------+-----+
我想用表达式“C2/C3+C4”创建一个新列C5,假设需要添加几个新列,并且表达式可能不同并且来自数据库。
有什么好的方法吗?
我知道如果我有一个像“2+3*4”这样的表达式,我可以使用 scala.tools.reflect.ToolBox 来评估它。
通常我使用 df.withColumn 来添加新列。
似乎我需要创建一个 UDF,但是如何将列值作为参数传递给 UDF?特别是可能有多个表达式需要不同的列计算。
最佳答案
这可以使用 expr
从表达式创建 Column
来完成:
val df = Seq((1,2)).toDF("x","y")
val myExpression = "x+y"
import org.apache.spark.sql.functions.expr
df.withColumn("z",expr(myExpression)).show()
+---+---+---+
| x| y| z|
+---+---+---+
| 1| 2| 3|
+---+---+---+
关于Scala 通过表达式向数据框添加新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46087420/