是否有 API 函数可以显示 RDD 的“已缓存的分数”?

Mar*_*icz 1 python apache-spark rdd pyspark

在PySparkShell 应用程序 UI ([server]:8088) 的“存储”选项卡上,我可以看到有关我正在使用的 RDD 的信息。其中一列是Fraction Cached

我如何以编程方式检索该百分比?

我可以用来getStorageLevel()获取一些有关 RDD 缓存的信息,但不能获取Fraction Cached 的信息

需要我自己计算吗?

zer*_*323 6

SparkContext.getRDDStorageInfo可能就是您正在寻找的东西。它返回一个Array提供RDDInfo以下信息的信息:

  • 内存大小。
  • 分区总数。
  • 缓存分区的数量。

它没有直接暴露在 PySpark 中,所以你必须有点创意:

from operator import truediv

storage_info =  sc._jsc.sc().getRDDStorageInfo()

[{
    "memSize": s.memSize(), 
    "numPartitions": s.numPartitions(), 
    "numCachedPartitions": s.numCachedPartitions(),
    "fractionCached": truediv(s.numCachedPartitions(), s.numPartitions())
} for s in storage_info]
Run Code Online (Sandbox Code Playgroud)

如果您有权访问REST API,您当然可以直接使用它:

import requests

url = "http://{0}:{1}/api/v1/applications/{2}/storage/rdd/".format(
    host, port, sc.applicationId
)

[r.json() for r  in [
   requests.get("{0}{1}".format(url, rdd.get("id"))) for
   rdd  in requests.get(url).json()
] if r.status_code == 200]
Run Code Online (Sandbox Code Playgroud)