Dav*_*ein 5 r dplyr apache-spark sparklyr
即使在相当小的数据集上,我也会遇到堆空间错误。我可以确定我没有耗尽系统内存。例如,考虑一个包含大约 20M 行和 9 列的数据集,它在磁盘上占用 1GB。我在具有 30GB 内存的 Google Compute 节点上使用它。
假设我在名为df. 以下工作正常,虽然有点慢:
library(tidyverse)
uniques <- search_raw_lt %>%
group_by(my_key) %>%
summarise() %>%
ungroup()
Run Code Online (Sandbox Code Playgroud)
下面抛出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()
Run Code Online (Sandbox Code Playgroud)
我尝试了这个建议来增加 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()
Run Code Online (Sandbox Code Playgroud)
最后,每Sandeep的评论,我试图降低MaxHeapSize到4G。(是MaxHeapSize每个虚拟工作者还是整个 Spark 本地实例?)我仍然遇到堆空间错误,而且我没有使用太多系统内存。
在研究 Sandeep 的建议时,我开始深入sparklyr 研究部署说明。这些提到驱动程序在此阶段可能会耗尽内存,并需要调整一些设置来纠正它。
这些设置并没有解决问题,至少最初没有。然而,将问题隔离到collect舞台上让我可以在 SO 上使用 SparkR 找到类似的 问题。
这些答案部分取决于环境变量的设置SPARK_MEM。把它们放在一起,我让它工作如下:
library(tidyverse)
library(sparklyr)
# Set memory allocation for whole local Spark instance
Sys.setenv("SPARK_MEM" = "13g")
# Set driver and executor memory allocations
config <- spark_config()
config$spark.driver.memory <- "4G"
config$spark.executor.memory <- "1G"
# Connect to Spark instance
sc <- spark_connect(master = "local")
# Load data into Spark
df_tbl <- copy_to(sc, df)
# Summarise data
uniques <- df_tbl %>%
group_by(my_key) %>%
summarise() %>%
ungroup() %>%
collect()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3307 次 |
| 最近记录: |