首页 > 解决方案 > 如何找到当前 spark 上下文中加载的所有 textFile(s)?

问题描述

例如,当我在使用 PySpark 的 Spark Shell 中时,我可能会使用以下命令将文件加载到 spark 上下文中:

readme = sc.textFile("/home/data/README.md")

然后我可以对这个 RDD(?) 执行如下操作来计算文件中的行数:

readme.count() 

但是我想知道的是,如何获取sc.textFile(s)已加载到sc(火花上下文)中的所有内容的列表?

例如,下面有一些命令可以获取所有配置,但它没有列出我加载的所有文本文件。

sc._conf.getAll() 

有没有办法找到所有已加载到 spark 上下文中的 textFiles?上市?

标签: pythonapache-sparkhadooppyspark

解决方案


SparkContext.textFile 不会在 Spark 上下文中存储任何内容。看看来源

  /**
   * Read a text file from HDFS, a local file system (available on all nodes), or any
   * Hadoop-supported file system URI, and return it as an RDD of Strings.
   * The text files must be encoded as UTF-8.
   *

您始终可以缓存您的 RDD,以便将它们保存在内存中。这篇文章解释了缓存机制。

如果您想跟踪 spark 作业中的文件,spark-submit 提供了--files将文件上传到执行目录的标志。如果您有不会更改的小文件。

如果添加外部文件, spark-submit 会提供--files标志

spark-submit --files您的文件将上传到此 HDFS 文件夹:hdfs://your-cluster/user/your-user/.sparkStaging/application_1449220589084_0508

application_1449220589084_0508 是纱线应用程序 ID 的示例!

在您的 spark 应用程序中,您可以通过 2 种方式找到您的文件:

1-通过以下代码找到 spark staging 目录:(但您需要拥有 hdfs uri 和您的用户名)

System.getenv("SPARK_YARN_STAGING_DIR"); 

.sparkStaging/application_1449220589084_0508

2-使用以下命令查找完整的逗号分隔文件路径:

System.getenv("SPARK_YARN_CACHE_FILES"); 

hdfs://yourcluster/user/hdfs/.sparkStaging/application_1449220589084_0508/spark-assembly-1.4.1.2.3.2.0-2950-hadoop2.7.1.2.3.2.0-2950.jar# spark .jar,hdfs://yourcluster /user/hdfs/.sparkStaging/application_1449220589084_0508/your-spark-job.jar# app .jar,hdfs://yourcluster/user/hdfs/.sparkStaging/application_1449220589084_0508/test_file.txt#test_file.txt


推荐阅读