diff --git a/spark/src/main/scala/org/apache/comet/DataTypeSupport.scala b/spark/src/main/scala/org/apache/comet/DataTypeSupport.scala index 66eab8c9f0..9adf829580 100644 --- a/spark/src/main/scala/org/apache/comet/DataTypeSupport.scala +++ b/spark/src/main/scala/org/apache/comet/DataTypeSupport.scala @@ -54,7 +54,8 @@ trait DataTypeSupport { TimestampNTZType => true case StructType(fields) => - fields.forall(f => isTypeSupported(f.dataType, f.name, fallbackReasons)) + fields.nonEmpty && fields.forall(f => + isTypeSupported(f.dataType, f.name, fallbackReasons)) case ArrayType(elementType, _) => isTypeSupported(elementType, ARRAY_ELEMENT, fallbackReasons) case MapType(keyType, valueType, _) => diff --git a/spark/src/main/scala/org/apache/comet/rules/CometScanRule.scala b/spark/src/main/scala/org/apache/comet/rules/CometScanRule.scala index 7ded26f23c..aad74064f6 100644 --- a/spark/src/main/scala/org/apache/comet/rules/CometScanRule.scala +++ b/spark/src/main/scala/org/apache/comet/rules/CometScanRule.scala @@ -357,6 +357,8 @@ case class CometScanTypeChecker(scanImpl: String) extends DataTypeSupport { false case _: StructType | _: ArrayType | _: MapType if scanImpl == CometConf.SCAN_NATIVE_COMET => false + case s: StructType if s.fields.isEmpty => + false case _ => super.isTypeSupported(dt, name, fallbackReasons) } diff --git a/spark/src/main/scala/org/apache/comet/serde/QueryPlanSerde.scala b/spark/src/main/scala/org/apache/comet/serde/QueryPlanSerde.scala index 1566e95e2b..1e95389c8c 100644 --- a/spark/src/main/scala/org/apache/comet/serde/QueryPlanSerde.scala +++ b/spark/src/main/scala/org/apache/comet/serde/QueryPlanSerde.scala @@ -198,7 +198,7 @@ object QueryPlanSerde extends Logging with CometExprShim { _: DecimalType | _: DateType | _: BooleanType | _: NullType => true case s: StructType if allowComplex => - s.fields.map(_.dataType).forall(supportedDataType(_, allowComplex)) + s.fields.nonEmpty && s.fields.map(_.dataType).forall(supportedDataType(_, allowComplex)) case a: ArrayType if allowComplex => supportedDataType(a.elementType, allowComplex) case m: MapType if allowComplex =>