在PySpark

时间:2018-01-23 02:56:44

标签: java database hadoop hive pyspark

我目前正在使用PySpark并在一个有大约6亿条记录的表上运行查询。桌子本身约300克。我的查询看起来像这样:

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可能有10万个这样的元组,而其他一些f1可能只有5个。我怀疑collect_list会导致一些问题。

我总是可以增加群集大小,但我想知道我是否可以对表做些什么。由f1分区也不是一种选择,因为它具有非常高的维度。我对Spark或Hive没有太多经验,所以任何帮助都会受到赞赏。

1 个答案:

答案 0 :(得分:1)

您显然正在尝试将巨大结果集的所有行加载到内存中。

  

我怀疑collect_list导致了一些问题。

这很可能是正确的。

解决方案要么是增加堆大小 1 ,要么改变处理结果集的方式,以便需要保留所有在记忆中同时。

1 - ......可能还有更多的RAM,更大的机器等。你可以看到它的发展方向。