问题
您的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和写出来作为单独的文件。