不能種植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和寫出來作為單獨的文件。