如何使用 sparklyr 显示数据帧的内存使用情况?

How to show memory usage of DataFrames using sparklyr?

类似于这个code snippet,它列出了本地R环境中对象的内存使用情况,是否有类似的命令来查看Spark连接中可用的DataFrames的内存?例如。类似于 src_tbls(sc),目前只列出所有数据帧,但不列出内存使用情况。

首先你要记住Spark中使用的数据结构默认是惰性的。除非有缓存,否则没有数据相关的存储开销。缓存本身是短暂的 - 取决于 StorageLevel 数据可能会因故障或节点退役而被逐出、丢失。

您还必须记住 SQL 使用压缩列式存储,因此内存使用可能会受到数据分布的影响。

如果您对操作系统看到的总内存使用情况感兴趣,您应该使用适当的监控解决方案,例如 Ganglia 或 Munin。

也就是说,可以使用 SparkContext:

访问有关当前状态的信息
sc <- spark_connect(...)

sc %>% 
  spark_context %>% 
  invoke("getRDDStorageInfo")

或通过查询 Spark UI:

url <- sc %>% spark_context %>% invoke("uiWebUrl") %>% invoke("get")

browseURL(paste(url, "storage", sep="/"))

或 REST API:

app_id <-  sc %>% spark_context %>% invoke("applicationId")
httr::GET(paste(
  url, "api", "v1", "applications", app_id, "storage", "rdd",  sep="/"
))