何时在 Spark 中使用 RDD 和 DataFrame
When to Use RDD And DataFrame in Spark
据我所知,RDD 不能像 DataFrame 那样利用 Spark 对结构化数据的优化,这是否证明在处理非结构化数据源时我们应该使用 RDD,而在处理结构化数据源时a table 从数据库中我们应该使用 DataFrame?那么像 json 这样的半结构化数据呢?我们应该采用哪种抽象? RDD 还是 DataFrame?
RDD
RDD 是 legacy 并将消失。它不能像 DF、DS 那样被优化。它是基于行的。它仍然具有 1 或 2 个方便的功能:a) 如果通过 zipWithIndex 放置升序序列号则使用;2) 如果您想要自定义分区。 JOIN 是可怕的、连续的(键、值)对连接,需要大量操作。 rdd 将数据保存到 "data at rest" 是有限的。为此,您倾向于转换为 DF。
DF, DS
DF 和 DS 是柱状结构(DS 不是针对 pyspark,而是箭头支持),可以通过 Catalyst 进行优化以生成更好的计划。 JOIns 更容易,更像 JSON 推理和对半结构化数据的支持,具有 SQL 类似的支持,这意味着除了数据工程师之外,可能有更多的人可以参与进来——也许吧。 DF 具有良好的读写支持(从/到)Hadoop 或 JDBS 数据库。
DS 有类型安全实施,但仍有一些问题,但你没有问过。
你也可以参考这个博客https://databricks.com/blog/2016/07/14/a-tale-of-three-apache-spark-apis-rdds-dataframes-and-datasets.html,但我并不完全相信所提到的所有观点。不过这是我的意见。
据我所知,RDD 不能像 DataFrame 那样利用 Spark 对结构化数据的优化,这是否证明在处理非结构化数据源时我们应该使用 RDD,而在处理结构化数据源时a table 从数据库中我们应该使用 DataFrame?那么像 json 这样的半结构化数据呢?我们应该采用哪种抽象? RDD 还是 DataFrame?
RDD
RDD 是 legacy 并将消失。它不能像 DF、DS 那样被优化。它是基于行的。它仍然具有 1 或 2 个方便的功能:a) 如果通过 zipWithIndex 放置升序序列号则使用;2) 如果您想要自定义分区。 JOIN 是可怕的、连续的(键、值)对连接,需要大量操作。 rdd 将数据保存到 "data at rest" 是有限的。为此,您倾向于转换为 DF。
DF, DS
DF 和 DS 是柱状结构(DS 不是针对 pyspark,而是箭头支持),可以通过 Catalyst 进行优化以生成更好的计划。 JOIns 更容易,更像 JSON 推理和对半结构化数据的支持,具有 SQL 类似的支持,这意味着除了数据工程师之外,可能有更多的人可以参与进来——也许吧。 DF 具有良好的读写支持(从/到)Hadoop 或 JDBS 数据库。
DS 有类型安全实施,但仍有一些问题,但你没有问过。
你也可以参考这个博客https://databricks.com/blog/2016/07/14/a-tale-of-three-apache-spark-apis-rdds-dataframes-and-datasets.html,但我并不完全相信所提到的所有观点。不过这是我的意见。