即使是非常小的數據集,我也會遇到堆空間錯誤。我可以肯定,我沒有用完系統內存。例如,考慮一個包含大約20M行和9列的數據集,並在磁盤上佔用1GB。我在帶有30GB內存的Google Compute節點上玩遊戲。Sparklyr中堆空間不足,但擁有大量內存
假設我在一個名爲df
的數據框中有這個數據。下面的工作很好,儘管有點慢:
library(tidyverse)
uniques <- search_raw_lt %>%
group_by(my_key) %>%
summarise() %>%
ungroup()
以下拋出java.lang.OutOfMemoryError: Java heap space
。
library(tidyverse)
library(sparklyr)
sc <- spark_connect(master = "local")
df_tbl <- copy_to(sc, df)
unique_spark <- df_tbl %>%
group_by(my_key) %>%
summarise() %>%
ungroup() %>%
collect()
我試着用this suggestion來增加堆空間到Spark。問題依然存在。看到機器的狀態htop
,我看到總的內存使用量永遠不會超過10GB。
library(tidyverse)
library(sparklyr)
config <- spark_config()
config[["sparklyr.shell.conf"]] <- "spark.driver.extraJavaOptions=-XX:MaxHeapSize=24G"
sc <- spark_connect(master = "local")
df_tbl <- copy_to(sc, df)
unique_spark <- df_tbl %>%
group_by(my_key) %>%
summarise() %>%
ungroup() %>%
collect()
最後,每Sandeep的評論,我試圖降低MaxHeapSize
到4G
。 (每個虛擬工作者或整個Spark本地實例是MaxHeapSize
?)我仍然遇到堆空間錯誤,並且我沒有使用系統的大部分內存。
減少'MaxHeapSize = 24G'到'MaxHeapSize = 4GB',因爲你只有一個GB的數據。它不需要24 GB的內存。即使是4GB就足夠了。 –
謝謝;它仍然會得到錯誤。我澄清了這個問題的文字來解決這個問題。 –
你也可以發佈你正在用來運行這項工作的火花提交命令? –