[英]Write data in Apache Parquet format
我正在使用一個調度程序來獲取我們的集群指標,並使用舊版本的Cloudera API將數據寫入HDFS文件。 但最近,我們更新了我們的JAR和原始代碼錯誤,但有一個例外。
java.lang.ClassCastException: org.apache.hadoop.io.ArrayWritable cannot be cast to org.apache.hadoop.hive.serde2.io.ParquetHiveRecord
at org.apache.hadoop.hive.ql.io.parquet.write.DataWritableWriteSupport.write(DataWritableWriteSupport.java:31)
at parquet.hadoop.InternalParquetRecordWriter.write(InternalParquetRecordWriter.java:116)
at parquet.hadoop.ParquetWriter.write(ParquetWriter.java:324)
我需要幫助使用ParquetHiveRecord類以鑲木地板格式寫入數據(即POJO)。
代碼示例如下:
Writable[] values = new Writable[20];
... // populate values with all values
ArrayWritable value = new ArrayWritable(Writable.class, values);
writer.write(value); // <-- Getting exception here
“作家”(ParquetWriter類型)的詳細信息:
MessageType schema = MessageTypeParser.parseMessageType(SCHEMA); // SCHEMA is a string with our schema definition
ParquetWriter<ArrayWritable> writer = new ParquetWriter<ArrayWritable>(fileName, new
DataWritableWriteSupport() {
@Override
public WriteContext init(Configuration conf) {
if (conf.get(DataWritableWriteSupport.PARQUET_HIVE_SCHEMA) == null)
conf.set(DataWritableWriteSupport.PARQUET_HIVE_SCHEMA, schema.toString());
}
});
此外,我們之前使用的是CDH和CM 5.5.1,現在使用的是5.8.3
謝謝!
我認為你需要使用DataWritableWriter
而不是ParquetWriter
。 類ParquetHiveRecord
異常表示寫支持類期望ParquetHiveRecord
的實例而不是ArrayWritable
。 DataWritableWriter
可能會以ArrayWritable
的形式將ParquetHiveRecord
的各個記錄ArrayWritable
為單個消息,並將每個記錄發送到寫入支持。
實木復合地板有時會彎曲。 :)
查看DataWritableWriteSupport類的代碼:https://github.com/apache/hive/blob/master/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/write/DataWritableWriteSupport.java您可以看到它正在使用DataWritableWriter,因此您不需要創建DataWritableWriter的實例,Write支持的想法是您可以將不同的格式寫入鑲木地板。
您需要的是將您的可寫文件包裝在ParquetHiveRecord中
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.