不能种植BufferHolder;超过大小限制

不能成长BufferHolder增长超过限制后的尺寸,因为尺寸;. lang。IllegalArgumentException错误。

写的亚当Pavlacka

去年发表在:2022年5月23日

问题

您的Apache火花的工作与一个失败BufferHolder IllegalArgumentException:不能生长错误。

. lang。IllegalArgumentException:不能长按大小BufferHolder XXXXXXXXX因为规模增长超过大小限制2147483632

导致

BufferHolder最大大小为2147483632字节(大约2 GB)。

如果一个列值超过这个尺寸,火花返回异常。

这可能发生在使用总量collect_list

这个示例代码生成重复的列值超过的最大大小BufferHolder。因此,它返回一个BufferHolder IllegalArgumentException:不能生长在笔记本电脑中运行时错误。

sql进口org.apache.spark.sql.functions %。_ spark.range (10000000)。withColumn (id1,点燃(“jkdhdbjasdshdjkqgdkdkasldksashjckabacbaskcbakshckjasbc $ % ^ ^ &&&&& * jxcfdkwbfkjwdqndlkjqslkndskbndkjqbdjkbqwjkdbxnsa xckqjwbdxsabvnxbaskxqbhwdhqjskdjxbqsjdhqkjsdbkqsjdkjqdhkjqsabcxns ckqjdkqsbcxnsab ckjqwbdjckqscx ns csjhdjkqsdhjkqshdjsdhqksjdhxqkjshjkshdjkqsdhkjqsdhjqskxb kqscbxkjqsc”)) .groupBy (id1”)。gg (collect_list (id1) .alias(“天”)。显示()

解决方案

您必须确保列值不超过2147483632字节。这可能需要你调整如何处理数据在你的笔记本上。


看着我们的示例代码,使用collect_set代替collect_list,解决了问题,并允许运行的例子。这一改变作品因为示例数据集包含大量重复的条目。


sql进口org.apache.spark.sql.functions %。_ spark.range (10000000)。withColumn (id1,点燃(“jkdhdbjasdshdjkqgdkdkasldksashjckabacbaskcbakshckjasbc $ % ^ ^ &&&&& * jxcfdkwbfkjwdqndlkjqslkndskbndkjqbdjkbqwjkdbxnsa xckqjwbdxsabvnxbaskxqbhwdhqjskdjxbqsjdhqkjsdbkqsjdkjqdhkjqsabcxns ckqjdkqsbcxnsab ckjqwbdjckqscx ns csjhdjkqsdhjkqshdjsdhqksjdhxqkjshjkshdjkqsdhkjqsdhjqskxb kqscbxkjqsc”)) .groupBy (id1”)。gg (collect_set (id1) .alias(“天”)。显示()

如果使用collect_set不让下面的列的大小BufferHolder2147483632字节的限制BufferHolder IllegalArgumentException:不能生长错误仍然发生。在这种情况下,我们将不得不把列表分割成多个DataFrames和写出来作为单独的文件。

这篇文章有用吗?