apache-spark - 令人震惊的 : RDD. zip() 方法

标签 apache-spark

我只是discovered RDD.zip()方法,我无法想象它的contract是什么 可能是。

当然,我明白它的作用。不过,我一直认为

  • RDD 中的元素顺序是一个毫无意义的概念
  • 分区的数量及其大小是一个实现细节,仅供用户用于性能调整

换句话说,RDD 是一个(多)集合,而不是序列(当然,在 Python 中,人们会得到 AttributeError : 'set' 对象没有属性 'zip')

我上面的理解有什么问题吗?

这种方法背后的基本原理是什么?

在像a.map(f).zip(a)这样的琐碎上下文之外它合法吗?

编辑1:

编辑 2:reply说:

when you compute one RDD from another the order of elements in the new RDD may not correspond to that in the old one.

这似乎意味着即使是微不足道的 a.map(f).zip(a)保证等同于a.map(x => (f(x),x))。当 zip() 结果可重现时是什么情况?

最佳答案

RDD 总是无序的这一说法并不正确。例如,如果 RDD 是 sortBy 操作的结果,则它具有有保证的顺序。 RDD 不是一个集合;它可以包含重复项。分区对于调用者来说并不是不透明的,并且可以控制和查询。许多操作确实会保留分区和顺序,例如map。也就是说,我发现很容易意外违反 zip 所依赖的假设,因为它们有点微妙,但它肯定有一个目的。

关于apache-spark - 令人震惊的 : RDD. zip() 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29268210/

相关文章:

scala - 了解 Spark 中广播变量的大小

scala - AWS Glue RDD.saveAsTextFile() 引发类 org.apache.hadoop.mapred.DirectOutputCommitter 未找到

scala - `map` 和 `reduce` 方法在 Spark RDD 中如何工作?

apache-spark - 具有 32GB 或更多内存的 spark worker 遇到 fatal error

hadoop - 使用 Apache Spark Streaming 和 Dataframes 交互式搜索 Parquet 存储的数据

scala - Spark数据帧中两行之间的差异

apache-spark - 尝试覆盖 Hive 分区时写入 __HIVE_DEFAULT_PARTITION__ 的行已损坏

python - Spark 程序在独立集群上运行时给出奇怪的结果

scala - 使用 Spark 从目录中读取多个文件

scala - REPL 返回 RDD 值,但 SBT 无法编译