【发布时间】:2016-05-28 00:32:02
【问题描述】:
假设我想写一个函数 foo 来转换一个 DataFrame:
object Foo {
def foo(source: DataFrame): DataFrame = {
...complex iterative algorithm with a stopping condition...
}
}
由于 foo 的实现有很多“Action”(collect、reduce 等),调用 foo 会立即触发代价高昂的执行。
这不是一个大问题,但是由于 foo 只将一个 DataFrame 转换为另一个,按照惯例,最好允许延迟执行:只有当结果 DataFrame 或其派生项是正在驱动程序上使用(通过另一个“动作”)。
到目前为止,唯一可靠地实现这一点的方法是将所有实现写入 SparkPlan,并将其叠加到 DataFrame 的 SparkExecution 中,这非常容易出错并且涉及大量样板代码。推荐的方法是什么?
【问题讨论】:
标签: scala apache-spark apache-spark-sql rdd lazy-evaluation