不能種植BufferHolder;超過大小限製

不能按大小增長BufferHolder,因為增長後的大小超過限製;java.lang.IllegalArgumentException錯誤。

寫的亞當Pavlacka

最後發布時間:2022年5月23日

問題

您的Apache Spark作業失敗無法增長BufferHolder錯誤。

illegalargumentexception:無法按大小XXXXXXXXX增長BufferHolder,因為增長後的大小超過了大小限製2147483632

導致

BufferHolder最大大小為2147483632字節(大約2 GB)。

如果列值超過這個大小,Spark將返回異常。

這可能發生在使用聚合時collect_list

此示例代碼在超過的最大大小的列值中生成副本BufferHolder.結果,它返回一個無法增長BufferHolder在筆記本中運行時出錯。

sql進口org.apache.spark.sql.functions %。_ spark.range(10000000)。withColumn("id1",lit(" jkdhdbjasdshdjkqgdkkasldksashjckabacbaskcbakshckjasbc $%^^&&&&&* jxcfdkwbfkjwdqndlkjqjjkdbdjkbqjjkdbvnxbaskxqbhwdhqjskdjxbsjsjkjsdbkqsjdjdkqsbqsshdjsdhqksjdhdhkjsdhjqskxb kqscsc "). groupby ("id1")。gg (collect_list (id1) .alias(“天”)。顯示()

解決方案

必須確保列值不超過2147483632字節。這可能需要你調整處理筆記本數據的方式。


看看我們的示例代碼,使用collect_set而不是collect_list解決了這個問題,並允許示例運行到完成。這個單一的更改能夠工作,因為示例數據集包含大量重複的條目。


sql進口org.apache.spark.sql.functions %。_ spark.range(10000000)。withColumn("id1",lit(" jkdhdbjasdshdjkqgdkkasldksashjckabacbaskcbakshckjasbc $%^^&&&&&* jxcfdkwbfkjwdqndlkjqjjkdbdjkbqjjkdbvnxbaskxqbhwdhqjskdjxbsjsjkjsdbkqsjdjdkqsbqsshdjsdhqksjdhdhkjsdhjqskxb kqscsc "). groupby ("id1")。gg (collect_set (id1) .alias(“天”)。顯示()

如果使用collect_set不保留下麵的列的大小BufferHolder2147483632字節的限製無法增長BufferHolder錯誤仍然發生。在本例中,我們必須將列表拆分為多個DataFrames,並將其作為單獨的文件寫入。