不要重新计算UDF

时间:2017-12-14 15:37:07

标签: scala apache-spark user-defined-functions

我正在使用生成随机值的UDF为我的数据框计算一列,然后我想与另一列中的该列相关联,但UDF不断重新计算。

我可以以某种方式使我的计算列不被重新计算吗?

简化示例:

$ import scala.util.Random
$ val r = new Random
$ val func: () => Int = () => r.nextInt(100)
$ import org.apache.spark.sql.functions.udf
$ val udfFunc = udf(func)
$ import spark.implicits._
$ val df = Seq(1).toDF("value")
$ df.withColumn("udfRandom", udfFunc()).withColumn("sameUdfRandom", $"udfRandom").show
+-----+---------+-------------+
|value|udfRandom|sameUdfRandom|
+-----+---------+-------------+
|    1|       51|           76|
+-----+---------+-------------+

我能想到的其他解决方案:

  • 计算与UDF值相关的所有值作为UDF输出的一部分,并在结构中输出所有值,以后稍后按列拆分
  • 将标准spark random()函数值发送到UDF,从外部注入随机性

0 个答案:

没有答案