【发布时间】:2018-01-23 02:56:43
【问题描述】:
我目前正在使用 PySpark 并在一个包含大约 6 亿条记录的表上运行查询。表本身大约 300GB。我的查询看起来像这样:
select f1, collect_list(struct(f2, f3)) as fdata
from table
group by 1
目前,我收到此错误:
# java.lang.OutOfMemoryError: Java heap space
# -XX:OnOutOfMemoryError="kill -9 %p"
# Executing /bin/sh -c "kill -9 1010"...
Killed
还有一点是(f2, f3)元组的分布不均匀。一些f1 可能有100k 个这样的元组,而另一些f1 可能只有5 个。我怀疑collect_list 会导致一些问题。
我总是可以增加集群大小,但我想知道我是否可以对表做点什么。按f1 分区也不是一种选择,因为它具有非常高的维度。我对 Spark 或 Hive 没有太多经验,因此我们将不胜感激。
【问题讨论】:
标签: java database hadoop hive pyspark