apache-spark - spark parquet 读写中的类型更改支持

标签 apache-spark schema parquet

我在通过 Spark 阅读 Parquet 时遇到了一个问题。

一个 Parquet 文件已写入字段 a类型 Integer .之后,使用 a 的架构读取此文件如 Long给出异常(exception)。

Caused by: java.lang.UnsupportedOperationException: Unimplemented type: LongType at org.apache.spark.sql.execution.datasources.parquet.VectorizedColumnReader.readIntBatch(VectorizedColumnReader.java:397) at org.apache.spark.sql.execution.datasources.parquet.VectorizedColumnReader.readBatch(VectorizedColumnReader.java:199) at org.apache.spark.sql.execution.datasources.parquet.VectorizedParquetRecordReader.nextBatch(VectorizedParquetRecordReader.java:263) at org.apache.spark.sql.execution.datasources.parquet.VectorizedParquetRecordReader.nextKeyValue(VectorizedParquetRecordReader.java:161) at org.apache.spark.sql.execution.datasources.RecordReaderIterator.hasNext(RecordReaderIterator.scala:39) at org.apache.spark.sql.execution.datasources.FileScanRDD$$anon$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()

对此的任何帮助都非常感谢。

最佳答案

由于 parquet 是 Hadoop 的基于列的存储格式,因此它也保留了数据的数据类型。因此,在读取具有不同数据类型的 Parquet 时,即使它正在向上转换,也不会自动处理。
你需要专门投数据

val colarraywithcast = Array(col("eid"),col("did"),col("seal").cast(LongType))
    
df.select(colarraywithcast:_*).printSchema

关于apache-spark - spark parquet 读写中的类型更改支持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52112557/

相关文章:

apache-spark - Spark join 导致列 ID 歧义错误

apache-spark - 在 spark scala 中过滤具有两种不同模式的列

apache-spark - pyspark 将数据添加到 TempTable

XML 架构多个元素和属性

java - 如何让 Avro 架构验证支持字段别名?

Java Spark : Stack Overflow Error on GroupBy

node.js - 是否可以禁用 Mongoose SchemaTypes 的自动类型转换?

apache-spark - Spark Parquet 分区 : How to choose a key

parquet - 创建 Parquet 文件时如何避免创建.crc文件

hadoop - 查找用于 hadoop 文件的压缩编解码器