Spark join/groupby 数据集需要很多时间

Posted

技术标签:

【中文标题】Spark join/groupby 数据集需要很多时间【英文标题】:Spark join/groupby datasets take a lot time 【发布时间】:2018-02-09 13:53:32 【问题描述】:

我有 2 个具有 35kk+ 行的数据集(表)。

我尝试通过某个 id 加入(或分组)这个数据集。 (通常是一对一的)

但是这个操作需要很多时间:25+ h

过滤器只能正常工作:~20 分钟

环境:emr-5.3.1

Hadoop 分发版:亚马逊

应用程序:Ganglia 3.7.2、Spark 2.1.0、Zeppelin 0.6.2

实例类型: m3.xlarge

代码(groupBy):

Dataset<Row> dataset = ...
...
.groupBy("id")
.agg(functions.min("date"))
.withColumnRenamed("min(date)", "minDate")

代码(加入):

...
.join(dataset2, dataset.col("id").equalTo(dataset2.col("id")))

我还在 EMR 日志中发现了这条消息:

HashAggregateExec: spark.sql.codegen.aggregate.map.twolevel.enable is set to true, but current version of codegened fast hashmap does not support this aggregate.

【问题讨论】:

您的数据有偏差吗?两个数据集中都有 NULL id 吗? 如果你尝试dataset1.join(dataset2, "id")会怎样? 【参考方案1】:

数据可能会出现偏差。我们面临着这个。检查您的加入专栏。这主要发生在您的连接列有 NULLS

检查数据存储模式:

select joining_column, count(joining_col) from <tablename>
group by joining_col

这会让你知道你的加入列中的数据是否均匀分布

【讨论】:

以上是关于Spark join/groupby 数据集需要很多时间的主要内容,如果未能解决你的问题,请参考以下文章

浅谈Spark RDD

在 Spark 中加入倾斜的数据集?

Spark入门讲解

Spark基础全解析

RDD之七:Spark容错机制

Spark 中的数据框和数据集