我有 Spark 提交脚本如下:
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
Run Code Online (Sandbox Code Playgroud)
集群配置 - 主节点和 2 个工作节点位于不同的容器中。
作业开始后,我可以看到 csv 文件被放入:
工人:
/usr/local/spark-2.0.2-bin-hadoop2.7/work/app-20170116160937-0036/0/test.csv
Run Code Online (Sandbox Code Playgroud)
司机:
/tmp/spark-f65b2466-e419-49bd-8da7-9f2b94cbf870/userFiles-abb14b33-58b1-47d6-935e-6c2943e3d55c/test.csv
Run Code Online (Sandbox Code Playgroud)
问题是——如何正确读取这个文件?目前我正在做如下:
private var initial: DataFrame = spark.sqlContext.read
.option("mode", "DROPMALFORMED")
.option("delimiter", conf.delimiter)
.option("dateFormat", conf.dateFormat)
.schema(conf.schema)
.csv("file:///*.csv")
Run Code Online (Sandbox Code Playgroud)
这会导致 FileNotFoundException。
如果您使用--files,文件将被放置在每个执行器的工作目录中。因此,您可以使用在提交命令中指定的相同路径来访问它们:
var initial = spark.read
.option("mode", "DROPMALFORMED")
.option("delimiter", conf.delimiter)
.option("dateFormat", conf.dateFormat)
.schema(conf.schema)
.csv("file:///home/user/*.csv")
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用 SparkContext.addFile() 和 SparkFiles.get()
| 归档时间: |
|
| 查看次数: |
10717 次 |
| 最近记录: |