即使是相当小的数据集,我也会遇到堆空间错误。我可以确定我没有用完系统内存。例如,考虑一个包含大约 20M 行和 9 列的数据集,它占用 1GB 磁盘空间。我在具有 30gb 内存的 Google Compute 节点上使用它。
假设我在一个名为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()
我尝试了这个增加 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
. (是MaxHeapSize
每个虚拟工作者还是整个 Spark 本地实例?)我仍然收到堆空间错误,而且我没有使用太多系统内存。