通过火花阅读镶木地板时遇到一个问题。
已写入一个实木复合地板文件,其字段a
的类型为Integer
。之后,以a
的{{1}}模式读取此文件会产生异常。
原因:java.lang.UnsupportedOperationException:未实现 类型:LongType at 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)
我认为支持此兼容的类型更改。但这是行不通的。
此代码段
Long
对此的任何帮助都非常感激。
答案 0 :(得分:1)
由于镶木地板是Hadoop的基于列的存储格式,因此它也保留数据的数据类型。因此,在读取具有不同数据类型的镶木地板时,即使其上浮,也不会自动处理。
您需要专门投射数据
val colarraywithcast = Array(col(“ eid”),col(“ did”),col(“ seal”)。cast(LongType))
df.select(colarraywithcast:_ *)。printSchema