是否有API函数为RDD显示“Fraction Cached”?

时间:2017-02-02 13:31:42

标签: python apache-spark pyspark rdd

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

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

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

我必须自己计算吗?

1 个答案:

答案 0 :(得分:2)

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]

如果您有权访问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]