【问题标题】:java.io.FileNotFoundException: File file:/data/home/test/analysis.json does not exist. Spark error while reading jsonjava.io.FileNotFoundException:文件文件:/data/home/test/analysis.json 不存在。读取json时出现火花错误
【发布时间】:2020-10-25 22:37:39
【问题描述】:

我正在尝试从 spark/scala 程序编写 json 文件,然后将其读入 DataFrame。这是我的代码:

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

当我尝试运行此代码时出现以下错误:

java.io.FileNotFoundException: File file:/data/home/test/analysis.json does not exist

我可以看到在 jar(我正在使用 spark-submit 运行 jar)所在的同一目录中创建文件。为什么代码找不到文件?

最初,我收到的是java.io.IOException: No input paths specified in job

正如这里指出的:Spark SQL "No input paths specified in jobs" when create DataFrame based on JSON file

这里:Spark java.io.IOException: No input paths specified in job

我将file:// 添加到从中读取json 文件的路径中,现在我得到了FileNotFoundException

我在 yarn 集群上运行 spark 1.6。会不会是程序启动后创建的文件对执行者不可用?

【问题讨论】:

    标签: java json scala apache-spark dataframe


    【解决方案1】:

    据我了解,您的应用程序的某些业务逻辑依赖于本地文件。

    我们可以通过将其称为 file:/// 来读取该文件。但要使其正常工作,文件的副本需要在每个工作人员上,或者每个工作人员都需要能够访问公共共享驱动器,就像在 NFS 挂载中一样。

    所以要解决这个问题,您可以使用spark-submit 提供--files 标签将文件上传到执行目录。如果您有不会更改的小文件。

    或者,正如其他人建议的那样,将其放在 HDFS 中

    【讨论】:

      【解决方案2】:

      所以,我想我是对的,该文件并非对所有执行者都可用。我能够通过将文件复制到 HDFS 中的某个位置来解决它。我不再看到错误了。我在代码中添加了以下几行:

      val fs = FileSystem.get(new URI("hdfs://nameservice1"), sc.hadoopConfiguration)
      
      fs.copyFromLocalFile(new Path("local_path"), new Path("hdfs_path"))
      

      然后将 hdfs_path 提供给hiveContext.read.json()

      现在可以毫无问题地创建 Dataframe。

      【讨论】:

        【解决方案3】:

        当路径文件或文件名(即 /Folder1/My Images/...)中有“空格”时,我们也会收到此错误消息。

        java.io.FileNotFoundException: File file:/.../314_100.jpg does not exist
        

        我用 spark 读取文件的案例。 将“My images”替换为“My_images”应该没问题。

        【讨论】:

          猜你喜欢
          • 2020-04-05
          • 2014-12-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-03
          相关资源
          最近更新 更多