【发布时间】:2021-03-28 20:16:54
【问题描述】:
我在通过 spark 阅读 parquet 时遇到了一个问题。
已使用类型为Integer 的字段a 编写了一个镶木地板文件。之后,使用 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$$anon$1.hasNext(FileScanRDD.scala:106)
我认为支持这种兼容的类型更改。但这不起作用。
这个代码sn-p:
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()
非常感谢您对此提供任何帮助。
【问题讨论】:
标签: apache-spark schema parquet