我有一个从Hbase中提取的数据集,这是一个长表格的宽表格,即有rowKey
,columnQualifier
和value
列。为了获得一种关键的形式,我需要将rowKey
(它是一个字符串UUID)分组到一个集合中,并将一个对象从集合中取出。问题在于,我设法执行的只是组中的元素数量;其他分组由于内存溢出超出YARN容器限制而导致容器被杀。我在内存大小方面做了很多实验,包括开销,分区和不分区等。我甚至进入了大量的分区,即大约10 000个分区,但是这个工作同样死去。我试了DataFrame groupBy
和collect_list
,以及数据集grouByKey
和mapGroups
。YARN在群组中死亡的火花容器由
该代码适用于小数据集,但不适用于较大的数据集。该数据集在Parquet文件中大约为500 GB。数据不会因为只有50个元素而成为群组中最大的群体。因此,据我所知,分区应该很容易适应内存,因为每个rowKey
的聚合数据并不是很大。数据键和值主要是字符串,并且时间不长。
我正在使用Spark 2.0.2;上面的计算都是Scala。
你增加了executors的内存吗?如果是这样,多少? –
是的,正如我所说,我做了很多实验,包括执行程序的内存和开销,执行程序和内核的数量,分区等等。问题也没有扭曲,这是分组情况下的常见怀疑。 –
你试过'reduceByKey'吗? –