def supportedShuffleDataType()

in spark/src/main/scala/org/apache/comet/serde/QueryPlanSerde.scala [2939:2962]


  def supportedShuffleDataType(dt: DataType): Boolean = dt match {
    case _: BooleanType | _: ByteType | _: ShortType | _: IntegerType | _: LongType |
        _: FloatType | _: DoubleType | _: StringType | _: BinaryType | _: TimestampType |
        _: TimestampNTZType | _: DecimalType | _: DateType =>
      true
    case StructType(fields) =>
      fields.forall(f => supportedShuffleDataType(f.dataType)) &&
      // Java Arrow stream reader cannot work on duplicate field name
      fields.map(f => f.name).distinct.length == fields.length
    case ArrayType(ArrayType(_, _), _) => false // TODO: nested array is not supported
    case ArrayType(MapType(_, _, _), _) => false // TODO: map array element is not supported
    case ArrayType(elementType, _) =>
      supportedShuffleDataType(elementType)
    case MapType(MapType(_, _, _), _, _) => false // TODO: nested map is not supported
    case MapType(_, MapType(_, _, _), _) => false
    case MapType(StructType(_), _, _) => false // TODO: struct map key/value is not supported
    case MapType(_, StructType(_), _) => false
    case MapType(ArrayType(_, _), _, _) => false // TODO: array map key/value is not supported
    case MapType(_, ArrayType(_, _), _) => false
    case MapType(keyType, valueType, _) =>
      supportedShuffleDataType(keyType) && supportedShuffleDataType(valueType)
    case _ =>
      false
  }