数据集 javaRDD() 性能

Posted

技术标签:

【中文标题】数据集 javaRDD() 性能【英文标题】:DataSet javaRDD() performance 【发布时间】:2017-08-19 14:51:13 【问题描述】:

我正在使用Spark SQLSparkApplication 中从Cassandra 检索数据。数据检索为DataSet。但是,我需要使用javaRDD() 函数将此dataset 转换为JavaRDD。它可以工作,但是大约需要2个小时。这次是否有一些参数需要调整以增强?

【问题讨论】:

【参考方案1】:

Dataset APIs 建立在SparkSQL 引擎之上,它使用Catalyst 生成优化的逻辑和物理查询计划。在R, Java, Scala,Python DataFrame/Dataset APIs 之间,所有关系类型查询都经过相同的代码优化器,提供空间和速度效率。 Dataset[T] 类型化 API 针对数据工程任务进行了优化,而 untyped Dataset[Row]DataFrame 的别名)甚至更快,适合交互式分析。

更多详情Spark RDD vs Dataset performance

【讨论】:

Nitpick... Dataset[Row] 并不比 Dataset[T] 快,因为类型化的 Dataset 具有显式编码器。如果需要解决的问题是一种迭代方法,那么不幸的是,RDD 是最好的方法。尽管暴露了 Dataset API,但大多数 SparkML 算法在幕后使用 RDD,因为 ML 问题通常是迭代的,而 Catalyst 不擅长优化迭代问题。【参考方案2】:

弹性分布式数据集 (RDD) 是 Spark 框架的主要抽象,而 Spark SQL(用于结构化数据处理的 Spark 模块)为 Spark 提供有关数据结构和计算的更多信息执行,因此使用这些额外的信息来执行额外的优化。

在 Spark 1.6 之前,RDD 的性能通常优于其 Spark SQL 对应的 DataFrame (https://community.hortonworks.com/articles/42027/rdd-vs-dataframe-vs-sparksql.html),但是,Spark 2.1 升级使 Spark SQL 更加高效

https://i.stack.imgur.com/TmhXf.png

【讨论】:

以上是关于数据集 javaRDD() 性能的主要内容,如果未能解决你的问题,请参考以下文章

如何一次处理多个 JavaRDD?

如何将数据集转换为 JavaPairRDD?

什么是对不相交集上的行进行聚类的正确 JavaRDD 转换

Spark学习之JavaRdd

Apache Spark 中的数据集

如何评估不同模型在一个数据集上的性能?