【问题标题】:Spark-Scala Unable to infer schema (Defer input path validation into DataSource)Spark-Scala 无法推断架构(将输入路径验证推迟到数据源中)
【发布时间】:2018-11-11 12:23:52
【问题描述】:

SPARK-26039

加载空的兽人文件夹时。无论如何要绕过这个。

val df = spark.read.format("orc").load(orcFolderPath)

org.apache.spark.sql.AnalysisException: Unable to infer schema for ORC. It must be specified manually.;
  at org.apache.spark.sql.execution.datasources.DataSource$$anonfun$7.apply(DataSource.scala:185)
  at org.apache.spark.sql.execution.datasources.DataSource$$anonfun$7.apply(DataSource.scala:185)
  at scala.Option.getOrElse(Option.scala:121)
  at org.apache.spark.sql.execution.datasources.DataSource.getOrInferFileFormatSchema(DataSource.scala:184)
  at org.apache.spark.sql.execution.datasources.DataSource.resolveRelation(DataSource.scala:373)
  at org.apache.spark.sql.DataFrameReader.loadV1Source(DataFrameReader.scala:223)
  at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:211)
  at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:178)
  ... 49 elided

得到这个错误可能是兽人阅读器试图推断架构,但我想绕过这个特殊情况,因为在存储库空白文件夹中以某种方式出现但必须检查。

try {
    spark.read.format("orc").load(path)
    } catch {
        case ex: org.apache.spark.sql.AnalysisException => {
        null
            }
    }

尝试通过这种方式捕获异常。任何其他方式都会有所帮助

【问题讨论】:

  • 将此代码放在单独的函数中。如果函数捕获此异常,请更改类级别的变量值或标志。
  • @Nikhil...我不想使用 try catch。但是如果有空文件夹,总会有异常......所以想要另一种方法......

标签: java scala apache-spark apache-spark-sql


【解决方案1】:

似乎还有一个解决方案......这也不是最好的......

import org.apache.hadoop.conf.Configuration
import org.apache.hadoop.fs.{FileSystem, Path}

  def pathStatus(path: String): Boolean = {
      val config: Configuration = new Configuration()
      val fs: FileSystem = FileSystem.get(config)
    if (fs.globStatus(new Path(path)) == null) {
      false
    } else {
      true
    }
  }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-20
    • 1970-01-01
    相关资源
    最近更新 更多