用apache parquet格式编写数据

z5btuh9x  于 2021-05-29  发布在  Hadoop
关注(0)|答案(2)|浏览(466)

我有一个调度器,它可以获取我们的集群指标,并使用旧版本的clouderaapi将数据写入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类以parquet格式编写数据(pojo)。
代码示例如下:

Writable[] values = new Writable[20];
... // populate values with all values
ArrayWritable value = new ArrayWritable(Writable.class, values);
writer.write(value); // <-- Getting exception here

“writer”(类型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
谢谢!

vi4fp9gy

vi4fp9gy1#

查看datawritablewritesupport类的代码:https://github.com/apache/hive/blob/master/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/write/datawritablewritesupport.java您可以看到它正在使用datawritablewriter,因此您不需要创建datawritablewriter的示例,写支持的想法是,你将能够写不同格式的Parquet地板。
你需要的是把你的可写的东西包在 parquet 上

5us2dqdw

5us2dqdw2#

我觉得你需要 DataWritableWriter 而不是 ParquetWriter . 类强制转换异常表示写支持类需要 ParquetHiveRecord 而不是 ArrayWritable . DataWritableWriter 很可能会在 ArrayWritableParquetHiveRecord 并发送给写支持。
Parquet地板有时会让人心神不宁

相关问题