java.io.FileNotFoundException:File文件:/data/home/test/analysis.json不存在。读取json时发生Spark错误
我试图从spark/scala程序中编写一个json文件,然后将其读入数据帧。这是我的代码:java.io.FileNotFoundException:File文件:/data/home/test/analysis.json不存在。读取json时发生Spark错误,java,json,scala,apache-spark,dataframe,Java,Json,Scala,Apache Spark,Dataframe,我试图从spark/scala程序中编写一个json文件,然后将其读入数据帧。这是我的代码: val analysisWriter = new BufferedWriter(new FileWriter("analysis.json")) for(i <- 0 to 10){ val obj = arr.get(i).asInstanceOf[JSONObject] currentAnalysis(""+obj.get("id")) }
val analysisWriter = new BufferedWriter(new FileWriter("analysis.json"))
for(i <- 0 to 10){
val obj = arr.get(i).asInstanceOf[JSONObject]
currentAnalysis(""+obj.get("id"))
}
analysisWriter.close()
val df = hiveContext.read.json("file:///data/home/test/analysis.json")
df.show(10)
}
def currentAnalysis(id: String): Unit= {
val arrCurrentAnalysis: JSONObject = acc.getCurrentAnalysis(""+id)
if(arrCurrentAnalysis != null) {
analysisWriter.append(arrCurrentAnalysis.toString())
analysisWriter.newLine()
}
我可以看到在jar所在的同一目录中创建的文件(我正在使用spark submit
运行jar)。为什么代码无法找到该文件
最初,我得到的是java.io.IOException:作业中没有指定输入路径
正如这里指出的:
这里:
我在读取json文件的路径中添加了file://
,现在我得到了FileNotFoundException
我在
纱线集群上运行spark 1.6
。是否该文件是在程序启动后创建的,执行者无法使用该文件?据我所知,您的应用程序的某些业务逻辑依赖于本地文件
我们可以将该文件称为file:///. 但要使其正常工作,文件副本需要位于每个工作进程上,或者每个工作进程都需要像NFS装载一样能够访问公共共享驱动器
因此,要解决这个问题,您可以使用spark submit
提供--files
标记将文件上载到执行目录。如果您有不更改的小文件
或者,正如其他人所建议的那样,将其放在HDFS中,因此,我想我是对的,该文件并非对所有执行者都可用。我能够通过将文件复制到HDFS中的某个位置来解决这个问题。我再也看不到这个错误了。我在代码中添加了以下行:
val fs = FileSystem.get(new URI("hdfs://nameservice1"), sc.hadoopConfiguration)
fs.copyFromLocalFile(new Path("local_path"), new Path("hdfs_path"))
然后提供到hiveContext.read.json()的hdfs_路径
它现在可以创建数据帧而不出现任何问题。当路径文件或文件名(即/Folder1/My Images/…)中出现“空白”时,我们也可以收到此错误消息
我的案子正在用spark读取文件。
将“我的图片”替换为“我的图片”,应该可以
val fs = FileSystem.get(new URI("hdfs://nameservice1"), sc.hadoopConfiguration)
fs.copyFromLocalFile(new Path("local_path"), new Path("hdfs_path"))
java.io.FileNotFoundException: File file:/.../314_100.jpg does not exist