查看关于 RDD/Apache Spark 的第一篇论文,我发现一个声明说“当没有足够的内存来存储它们时,RDD 会优雅地降级,只要它们仅用于基于扫描的操作”
什么是 RDD 上下文中的基于扫描的操作以及Spark 中的哪些转换是基于扫描的操作
查看关于 RDD/Apache Spark 的第一篇论文,我发现一个声明说“当没有足够的内存来存储它们时,RDD 会优雅地降级,只要它们仅用于基于扫描的操作”
什么是 RDD 上下文中的基于扫描的操作以及Spark 中的哪些转换是基于扫描的操作
基于扫描的操作基本上是所有需要评估 RDD 上的谓词的操作。
换句话说,每次创建 RDD 或 DataFrame 时,您需要在其中计算谓词,例如执行过滤器、在案例类上映射,甚至是解释方法,都将被视为基于扫描的操作。
为了更清楚,让我们回顾一下谓词的定义。
谓词或功能谓词是一个逻辑符号,可以应用于对象项以产生另一个对象项。
函数谓词有时也称为映射,但该术语也可以具有其他含义。
例子 :
// scan based transformation
rdd.filter(!_.contains("#")) // here the predicate is !_.contains("#")
// another scan based transformation
rdd.filter(myfunc) // myfunc is a boolean function
// a third also trivial scan based transformation followed by a non scan based one.
rdd.map(myfunc2)
.reduce(myfunc3)
如果您想了解 Spark 内部是如何工作的,我建议您观看Databricks 关于主题的演示文稿