gpt4 book ai didi

scala - 评估 Spark DataFrame 中的公式

转载 作者:行者123 更新时间:2023-12-04 03:31:38 26 4
gpt4 key购买 nike

是否可以评估引用列的数据框中的公式?例如如果我有这样的数据(Scala 示例):

val df = Seq(
( 1, "(a+b)/d", 1, 20, 2, 3, 1 ),
( 2, "(c+b)*(a+e)", 0, 1, 2, 3, 4 ),
( 3, "a*(d+e+c)", 7, 10, 6, 2, 1 )
)
.toDF( "Id", "formula", "a", "b", "c", "d", "e" )

df.show()
预期成绩:
enter image description here
我一直无法获取 selectExpr , expr , eval()或它们的组合来工作。

最佳答案

您可以在 UDF 中使用 scala 工具箱 eval:

import org.apache.spark.sql.functions.col
import scala.reflect.runtime.universe
import scala.tools.reflect.ToolBox
val tb = universe.runtimeMirror(getClass.getClassLoader).mkToolBox()

val cols = df.columns.tail
val eval_udf = udf(
(r: Seq[String]) =>
tb.eval(tb.parse(
("val %s = %s;" * cols.tail.size).format(
cols.tail.zip(r.tail).flatMap(x => List(x._1, x._2)): _*
) + r(0)
)).toString
)

val df2 = df.select(col("id"), eval_udf(array(df.columns.tail.map(col):_*)).as("result"))

df2.show
+---+------+
| id|result|
+---+------+
| 1| 7|
| 2| 12|
| 3| 63|
+---+------+

关于scala - 评估 Spark DataFrame 中的公式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66707384/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com