Я столкнулся с одной проблемой при чтении паркета через искру.
Один файл паркета был записан с полем a
типа Integer
. После этого чтение этого файла со схемой для a
как Long
дает исключение.
Причина: java.lang.UnsupportedOperationException: не реализовано
Тип: LongType в
org.apache.spark.sql.execution.datasources.parquet.VectorizedColumnReader.readIntBatch (VectorizedColumnReader.java:397)
в
org.apache.spark.sql.execution.datasources.parquet.VectorizedColumnReader.readBatch (VectorizedColumnReader.java:199)
в
org.apache.spark.sql.execution.datasources.parquet.VectorizedParquetRecordReader.nextBatch (VectorizedParquetRecordReader.java:263)
в
org.apache.spark.sql.execution.datasources.parquet.VectorizedParquetRecordReader.nextKeyValue (VectorizedParquetRecordReader.java:161)
в
org.apache.spark.sql.execution.datasources.RecordReaderIterator.hasNext (RecordReaderIterator.scala: 39)
в
org.apache.spark.sql.execution.datasources.FileScanRDD $$ Анон $ 1.hasNext (FileScanRDD.scala: 106)
Я думал, что это совместимое изменение типа поддерживается. Но это не работает.
Фрагмент кода:
val oldSchema = StructType(StructField("a", IntegerType, true) :: Nil)
val df1 = spark.read.schema(oldSchema).json("/path/to/json/data")
df1.write.parquet("/path/to/parquet/data")
val newSchema = StructType(StructField("a", LongType, true) :: Nil)
spark.read.schema(newSchema).parquet("/path/to/parquet/data").show()
Любая помощь в этом деле очень ценится.