Apache Spark spark-submit从--files参数提交读取文件

时间:2017-01-16 16:24:51

标签: apache-spark

我有火花提交scirpt如下:

spark-submit \
  --name daily_job\
  --class com.test.Bootstrapper \
  --files /home/user/*.csv\
  --conf spark.executor.memory=2g\
  --conf spark.executor.cores=2\
  --master spark://172.17.0.4:7077\
  --deploy-mode client \
  --packages com.typesafe:config:1.3.1\
  file:///home/user/workspace/spark-test/target/spark-test-0.1-SNAPSHOT.jar

群集配置 - master& 2名不同容器的工人。

作业开始后,我可以看到csv文件被放入:

工人:

/usr/local/spark-2.0.2-bin-hadoop2.7/work/app-20170116160937-0036/0/test.csv

驱动:

/tmp/spark-f65b2466-e419-49bd-8da7-9f2b94cbf870/userFiles-abb14b33-58b1-47d6-935e-6c2943e3d55c/test.csv

问题是 - 如何正确阅读此文件? 目前我正在做如下:

private var initial: DataFrame = spark.sqlContext.read
    .option("mode", "DROPMALFORMED")
    .option("delimiter", conf.delimiter)
    .option("dateFormat", conf.dateFormat)
    .schema(conf.schema)
    .csv("file:///*.csv")

导致FileNotFoundException。

1 个答案:

答案 0 :(得分:1)

如果您使用的是--files,则文件将被放置在每个执行程序的工作目录中。因此,您可以使用在提交命令中指定的相同路径访问它们:

var initial = spark.read
    .option("mode", "DROPMALFORMED")
    .option("delimiter", conf.delimiter)
    .option("dateFormat", conf.dateFormat)
    .schema(conf.schema)
    .csv("file:///home/user/*.csv")

或者,您可以使用SparkContext.addFile()和SparkFiles.get()