Scala 通过表达式向数据框添加新列

标签 scala apache-spark dataframe

我将使用表达式向数据框添加新列。 例如,我有一个数据框

+-----+----------+----------+-----+
| 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/

相关文章:

scala - Lazy Val - 如何重置值?

scala - Spark构建失败: Error while building spark from source

scala - 从另一个 RDD 中减去一个 RDD 无法正常工作

python - 使用 sort_values + head() 时如何包含匹配值

scala - scala 中总是调用 eq == 吗?

swing - Scala Swing 脚本不工作

apache-spark - 计算 spark Dataframe 中的新列,使用 pyspark 将 df1 中的标记列表列与 df2 中的文本列交叉

scala - 如何在Intellij IDEA中运行Spark示例程序

python - 从 Pandas 数据框列中删除 'seconds' 和 'minutes'

python - 如何将数据框的一列放入 Python 中的泊松分布