【问题标题】:Why are there different RDDs and what are their respective purposes?为什么会有不同的 RDD,它们各自的用途是什么?
【发布时间】:2016-06-04 00:43:40
【问题描述】:

Spark中有很多RDD;来自docs

  • AsyncRDDActions
  • CoGroupedRDD
  • 双RDDF函数
  • HadoopRDD
  • JdbcRDD
  • 新HadoopRDD
  • 有序RDDF函数
  • 对RDDF函数
  • PartitionPruningRDD
  • RDD
  • SequenceFileRDDFunctions
  • 无序RDD
  • UnionRDD

我不明白它们应该是什么。

另外我注意到有

  • ParallelCollectionRDD
  • MapPartitionsRDD

虽然它们在我的 spark-shell 中经常作为对象出现,但并未列出。

问题

为什么会有不同的 RDD,它们各自的用途是什么?

到目前为止我所理解的

我从教程和书籍(例如“Learning Spark”)中了解到,RDD 上有两种类型的操作:用于具有对 (x, y) 和所有其他操作的 RDD。所以我希望有课程RDDPairRDD 就是这样。

我的怀疑

我怀疑我弄错了部分,实际情况是很多 RDD 类可能只是一个 RDD 类 - 但这会使事情变得不那么整洁。因此,开发人员决定将不同的方法放入不同的类中,为了将这些方法提供给任何 RDD 类类型,他们使用implicit 在类类型之间进行强制转换。我怀疑由于许多 RDD 类类型以“Functions”或“Actions”结尾,并且各个 scaladocs 中的文本听起来像这样。

另外我怀疑一些 RDD 类仍然不是那样,但有一些更深入的含义(例如ShuffledRDD)。

但是 - 我不确定。

【问题讨论】:

    标签: scala apache-spark


    【解决方案1】:

    首先,列出的类中大约有一半没有扩展 RDD,而是设计用于使用特定于存储类型的不同方法来增强 RDD 的类型类。

    一个常见的例子是RDD[(T, U)],通常称为PairRDD,它通过PairRDDFunctions 提供的方法得到了丰富,例如combineByKeyWithClassTag,它是所有byKey 转换的基本构建块。没有 PairRDDPairwiseRDD 这样的类毫无价值,而且这些名称纯粹是非正式的。

    RDD 的一些常用子类不属于公共 API,因此未在上面列出。一些值得一提的例子是ParallelCollectionRDDMapPartitionsRDD

    RDD 是一个抽象类,没有实现两个重要的方法:

    • compute 计算给定分区的结果
    • getPartitions 返回给定RDD 的分区序列

    一般来说,子类化 RDD 有两个原因;

    • 创建一个表示输入源的类(例如ParallelCollectionRDDJdbcRDD
    • 创建一个提供非标准转换的RDD

    所以要总结

    • RDD 类为RDDs 提供了一个最小接口。
    • RDD 的子类提供基于外部源和/或父 RDDs 的实际计算所需的内部逻辑。它们要么是私有的,要么是开发者 API 的一部分,不包括调试字符串或 Spark UI,不会直接暴露给最终用户。
    • 类型类根据存储在RDD 中的值的类型提供额外的方法,而不依赖于它是如何创建的。

    【讨论】:

    • 好的,但是我写的不是扩展而是隐式转换的目的是什么? “代表输入源”有什么意义-毕竟ParallelCollectionRDD甚至不是公共api?感谢您提供的信息 - 我学到了一些东西 - 但到目前为止,我觉得我的问题没有得到解答。
    • 这很简单,访问外部数据库、转换本地集合或使用 Hadoop 输入源的处理逻辑完全不同。这些类都不是为公共/非开发使用而设计的(它们要么是私有的,要么是开发人员 API 的一部分),并且从不在典型的程序中公开。
    • 很公平,但(希望)背后仍有逻辑。调试时可能很有用。例如,如果ShuffledRDD 总是在洗牌后立即出现 - 那就是告诉我一些非常有用的东西。
    猜你喜欢
    • 2017-02-23
    • 2016-10-24
    • 1970-01-01
    • 2017-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多