用于聚合的 Spark 数据集或数据框

Posted

技术标签:

【中文标题】用于聚合的 Spark 数据集或数据框【英文标题】:Spark Dataset or Dataframe for Aggregation 【发布时间】:2017-10-17 19:13:47 【问题描述】:

我们有一个使用 Spark 2.0 版的 MapR 集群 我们正在尝试测量当前在 TEZ 引擎上运行的 Hive 查询的性能差异,然后通过在 .hql 文件中编写 sql 查询然后通过 shell 文件调用它来在 Spark-sql 上运行它。

Query 包含大量的 Join,这肯定会创建多个阶段,并且在这种情况下会发生 shuffle 什么是最佳选择。?

Spark 中的数据集在执行 groupBy、max、min、count..etc 等聚合方面确实比 Dataframe 慢吗?

那么在哪些方面,Dataframes 比 Datasets 表现更好,反之亦然..?

【问题讨论】:

【参考方案1】:

在 Spark 2.0 中,Dataset[Row] 是 Dataframe 的别名,所以应该不会有任何性能问题。

请看:

When to use Spark DataFrame/Dataset API and when to use plain RDD?

A Tale of Three Apache Spark APIs: RDDs, DataFrames, and Datasets

【讨论】:

那么这是否意味着 Spark Datasets 和 Dataframe 在各个方面的性能都非常相似 ..? @Aijaz 是数据集 = 数据框 + 类型安全

以上是关于用于聚合的 Spark 数据集或数据框的主要内容,如果未能解决你的问题,请参考以下文章

获取Apache Spark Java中的整个数据集或仅列的摘要

我们如何在 Apache Spark 中执行动态重新分区?

Spark 数据集连接和聚合列

正确拆分数据集

Apache Spark 使用 SQL 函数 nTile 对数据进行分区

Spark Scala数据框具有单个Group By的多个聚合[重复]