Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java.io.FileNotFoundException:File文件:/data/home/test/analysis.json不存在。读取json时发生Spark错误_Java_Json_Scala_Apache Spark_Dataframe - Fatal编程技术网

java.io.FileNotFoundException:File文件:/data/home/test/analysis.json不存在。读取json时发生Spark错误

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")) }

我试图从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"))
    }
    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