如何计算缓存中特定RDD的大小?

时间:2017-11-20 21:50:21

标签: apache-spark

我经常处理被YARN杀死超过内存限制的容器。我怀疑它与低效的缓存/未存在的RDDS / Dataframe有关。

调试此类问题的最佳方法是什么?

我看过"存储" Spark Web UI中的选项卡,但" RDD名称"没有比#34; MapPartitionsRDD"更具描述性。或者" UnionRDD"。如何确定哪些特定RDD占用缓存中的最大空间?

为了弄清楚Out of Memory错误,我需要弄清楚哪些RDD占用了缓存中的最多空间。我也希望能够跟踪他们何时无人问津。

1 个答案:

答案 0 :(得分:1)

  • 对于RDDs,您可以使用setName方法设置有意义的名称:

    val rdd: RDD[T] = ???
    rdd.setName("foo")
    
  • 对于catalog支持的表:

    val df: DataFrame = ???
    df.createOrReplaceTempView("foo")
    spark.catalog.cacheTable("foo")
    

    目录中的名称将反映在用户界面和SparkContext.getPersistentRDD

  • 我不知道任何适用于独立Datasets的解决方案。