激发高阶函数渴望lambda评估

时间:2019-08-05 17:53:14

标签: apache-spark pyspark apache-spark-sql

Spark v2.4

我想这样做

(
     df.withColumn('foo', F.expr('transform(values, x -> x.v)'))
    .withColumn('baz', F.expr("filter(bar, x -> !array_contains(foo, bar.v))"))
)

.explain开始的计划中,这似乎等于

(
   df
    .withColumn('baz', F.expr(
         "filter(bar, x -> !array_contains(transform(values, y -> y.v), bar.v))"
    ))
)

也就是说,对于bar的每个元素,spark将创建一个新的values转换数组。对于性能来说是很糟糕的。

如何确定transform每行仅被评估一次?

0 个答案:

没有答案