【问题标题】:diagnostics: User class threw exception: org.apache.spark.sql.AnalysisException: path {PATH} already exists诊断:用户类抛出异常:org.apache.spark.sql.AnalysisException:路径 {PATH} 已存在
【发布时间】:2021-06-09 22:28:34
【问题描述】:

我的代码:

    val outputFileName = inputFileName.concat("/result")
    val subDF = sparkSession.sqlContext.createDataFrame(subRdd, tempResultDF.schema)
    tempResultDF.union(subDF).write.json(outputFileName)

使用union函数时,spark job无法写入输出。

诊断:用户类抛出异常:org.apache.spark.sql.AnalysisException:路径 {hdfs://outputFileName} 已存在。

如果我删除union 函数并只写tempResultDF,它会很好地工作。

    val outputFileName = inputFileName.concat("/result")
    // val subDF = sparkSession.sqlContext.createDataFrame(subRdd, tempResultDF.schema)
    tempResultDF.write.json(outputFileName)

因为我使用 tempResultDF 架构创建了 subDF,所以我没想到这里会出错。

另外,我不明白错误日志。这是关于 FileExist 错误,而不是 DF 或函数相关的错误。

当尝试使用覆盖选项时,

tempResultDF.write.mode(SaveMode.Overwrite).json(outputFileName)

又发生了一个错误。

原因:java.lang.RuntimeException:编码时出错:java.lang.ArrayIndexOutOfBoundsException:11

感谢任何评论或链接。

【问题讨论】:

    标签: scala apache-spark


    【解决方案1】:

    假设 outputFileName 是一个 hdfs 路径,请检查它是否存在并在下面尝试

    df.write.json.mode("")   //append or overwrite
    

    【讨论】:

    • 尝试使用write.mode(SaveMode.Overwrite).json(outputFileName) 时,也会出现错误。我在问题上添加了日志。
    【解决方案2】:

    这是因为subRdd 格式与tempResultDF.schema 不同。 我把subRdd改成匹配tempResultDF.schema格式,DF就写好了。

    【讨论】:

      猜你喜欢
      • 2020-11-27
      • 1970-01-01
      • 2021-12-29
      • 1970-01-01
      • 1970-01-01
      • 2019-09-03
      • 2016-12-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多