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 数据集需要很多时间的主要内容,如果未能解决你的问题,请参考以下文章