首页 > 解决方案 > Spark读取空目录

问题描述

试图读取一个空的 parquet 目录,得到这个错误

无法为镶木地板指定架构。必须手动指定

我的代码

val myObject = spark.read.parquet(path).as[MyClass].filter(p => ......)

尝试使用 scala 'Try' 处理并定期检查空目录

myObject.rdd.isEmpty

有任何想法吗

标签: scalaapache-spark

解决方案


你可以试试这样

var myObject: DataFrame = null
try {
   myObject = spark.read.parquet(path).as[MyClass].filter(p => ......)
catch {
  case ae: AnalysisException =>
    //Do your logic here
}

在这种情况下,“myObject.rdd.isEmpty”不起作用,因为它需要加载目录并推断架构,然后检查是否为空。

要使其工作,您可以执行以下操作:

val customSchema = StructType(Array(
  StructField("id", IntegerType, true),
  StructField("name", StringType, true),
  StructField("email", StringType, true))
)

val myObject = spark.read.schema(customSchema).parquet(path).as[MyClass].filter(p => ......)

if(myObject.rdd.isEmpty) {
   //Do something
}
else {
  //Do something else
}

推荐阅读