数据集 javaRDD() 性能
Posted
技术标签:
【中文标题】数据集 javaRDD() 性能【英文标题】:DataSet javaRDD() performance 【发布时间】:2017-08-19 14:51:13 【问题描述】:我正在使用Spark SQL
在Spark
Application 中从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() 性能的主要内容,如果未能解决你的问题,请参考以下文章