Spark-Scala 无法推断架构(将输入路径验证推迟到数据源中)
Posted
技术标签:
【中文标题】Spark-Scala 无法推断架构(将输入路径验证推迟到数据源中)【英文标题】:Spark-Scala Unable to infer schema (Defer input path validation into DataSource) 【发布时间】: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。但是如果有空文件夹,总会有异常......所以想要另一种方法...... 【参考方案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
【讨论】:
以上是关于Spark-Scala 无法推断架构(将输入路径验证推迟到数据源中)的主要内容,如果未能解决你的问题,请参考以下文章
Azure Databricks 将 JSON 数据写入 Parquet 文件引发错误:TypeError:无法推断类型的架构