簡體   English   中英

spark-submit 中 --files 的目的和用例是什么?

[英]what's the purpose and usecase of --files in spark-submit?

我有兩個文件,現在在本地,以后可以在 S3/HDFS 等上。用戶文件是 ~75mb ~100 萬條記錄。 一個位置文件是 ~150kb ~7000 條記錄。

我想讀取文件並從命令行發送路徑。

我很困惑是否應該將文件的完整路徑作為參數發送給 main 或使用 --files 標志?

如果是,是否應該只通過 --files 標志發送小文件(什么大小?),因為它將文件發送給每個執行程序,因為涉及傳輸?

我有這樣的代碼

override def run(spark: SparkSession, config: RecipeCookingTimeConfig, storage: Storage): Unit = {

    /**
      * Only I/O here
      * Transformations and Pre-Processing go in separate functions
      */
    MyLogger.log.setLevel(Level.WARN)

    val userFilePath =
      if (config.userFileName.isEmpty) "/tmp/data/somefile.json"
      else SparkFiles.get(config.userFileName)
    val userData = storage.read(ReadConfig("json", userFilePath)) match {
      case Success(value) => value
      case Failure(ex)    => spark.stop(); System.exit(1); spark.emptyDataFrame
    }

    val airportFilePath =
      if (config.airportFileName.isEmpty) "/tmp/data/somefile2.json"
      else SparkFiles.get(config.airportFileName)
    val airportData = storage.read(ReadConfig("json", airportFilePath)) match {
      case Success(value) => value
      case Failure(ex)    => spark.stop(); System.exit(1); spark.emptyDataFrame
    }
  }

--files逗號分隔的文件列表

  • 如果 memory 服務正確,則使用 YARN 集群模式存放在每個 Executor 的工作目錄中的文件的逗號分隔列表。

  • 用例是(盡管我自己從未使用過)是您可以讀取的配置信息,而不是使用 args[x] 方法。

要放置在每個執行程序的工作目錄中的文件的逗號分隔列表。 對於客戶端部署模式,路徑必須指向本地文件。 對於集群部署模式,路徑可以是本地文件,也可以是集群內全局可見的 URL。 這些文件在執行器中的文件路徑可以通過SparkFiles.get(fileName)訪問。

--files的其他調整:

  • spark.files.fetchTimeout
  • spark.files.useFetchCache
  • spark.files.overwrite
  • spark.files.maxPartitionBytes
  • spark.files.openCostInBytes

更多細節在官方文檔中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM