Scala Apache Spark submit--文件java.io.FileNotFoundException

Scala Apache Spark submit--文件java.io.FileNotFoundException,scala,apache-spark,Scala,Apache Spark,我有一个spark脚本,它读取文件spark.read.textFile(filePath) 我从主机本身的容器中运行它,并尝试使用--files参数传递此文件,例如 ./spark-submit --class nameOfClass --files local/path/to/file.csv --master spark://master_ip generated_executable.jar local/path/to/file.csv` 但是我得到了错误 java.io.FileNo

我有一个spark脚本,它读取文件
spark.read.textFile(filePath)
我从主机本身的容器中运行它,并尝试使用
--files
参数传递此文件,例如

./spark-submit --class nameOfClass --files local/path/to/file.csv --master spark://master_ip generated_executable.jar local/path/to/file.csv`
但是我得到了错误

java.io.FileNotFoundException: File file:/local/path/to/file.csv does not exist
我试着把线路改成:
spark.read.textFile(SparkFiles.get(fileName))

但是错误依然存在,现在它说

java.io.FileNotFoundException: File file:/mnt/mesos/sandbox/spark-946bbaef-a258-4951-9b15-bec77b78bf5d/userFiles-3f9dcf85-4114-4968-b625-6bb1498f568d/file.csv does not exist

如果我手动将文件添加到每个worker,它就会工作。但我不想那样做。有没有办法从提交作业的上下文传递该文件?

一个好的替代方法是将csv文件放到hdfs中。那么你就不必处理每个执行人的文件了。我不认为将文件传递给spark submit调用以便读取它是一种常见的模式

假设它位于
hdfs://tmp/file.csv
您可以通过编码来读取它

spark.read.textFile(“/tmp/file.csv”)

这样就有机会完全通过
--files
传递文件


但是您可以做的是在本地模式下运行作业。这是一个简单的解决方法,避免了在每个节点上手动放置文件。然后spark会在下面找到您想要的文件

文件:/local/path/to/file.csv


我希望这有帮助

这能回答你的问题吗?不,没有。我会用这些信息更新这个问题