AvroParquetWriter-addLogicalTypeConversion在使用版本1.12.3的parquet-avro时不能正常工作,导致ClassCastException异常。
创始人
2024-11-13 08:00:22
0

此问题的解决方法是创建自定义的逻辑类型转换器,并将其传递给AvroParquetWriter的构造函数。以下是一个代码示例:

import org.apache.avro.Conversions;
import org.apache.avro.LogicalType;
import org.apache.avro.LogicalTypes;
import org.apache.avro.Schema;
import org.apache.avro.data.TimeConversions;
import org.apache.avro.generic.GenericData;
import org.apache.avro.generic.GenericRecord;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.parquet.avro.AvroParquetWriter;
import org.apache.parquet.hadoop.ParquetWriter;
import org.apache.parquet.hadoop.metadata.CompressionCodecName;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.StandardOpenOption;
import java.time.LocalDate;
import java.time.LocalDateTime;

public class AvroParquetWriterExample {

    public static void main(String[] args) throws IOException {
        Path outputPath = new Path("example.parquet");

        Schema avroSchema = new Schema.Parser().parse(Files.readAllBytes(Path.of("example.avsc")));

        // create custom logical type conversions
        LogicalType dateLogicalType = LogicalTypes.date();
        Conversions.DateConversion dateConversion = new Conversions.DateConversion();
        LogicalType.LocalDateTimeMillisLogicalType localDateTimeLogicalType = new LogicalType.LocalDateTimeMillisLogicalType();
        Conversions.LocalDateTimeConversion localDateTimeConversion = new Conversions.LocalDateTimeConversion();

        // create avro generic record
        GenericRecord record = new GenericData.Record(avroSchema);
        record.put("id", 1L);
        record.put("name", "John");
        record.put("birthdate", LocalDate.of(2000, 1, 1).toEpochDay());
        record.put("timestamp", LocalDateTime.now().toEpochSecond(LocalTimeConverter.UTC_OFFSET));

        // create avro parquet writer with custom logical type conversions
        Configuration conf = new Configuration();
        FileSystem fs = FileSystem.get(conf);
        ParquetWriter parquetWriter = AvroParquetWriter.builder(outputPath)
                .withSchema(avroSchema

相关内容

热门资讯

外挂绝活!uupoker透视,... 外挂绝活!uupoker透视,扑克之星辅助-总是是真的有辅助教程(哔哩哔哩)1、点击下载安装,扑克之...
外挂妙计!智星菠萝可以辅助吗,... 外挂妙计!智星菠萝可以辅助吗,佛手在线大菠萝为什么都输-一贯真的是有辅助方法(哔哩哔哩)1、下载好佛...
外挂攻略!来玩app 德州 辅... 外挂攻略!来玩app 德州 辅助,约局吧如何查看是否有挂-果然一直总是有辅助方法(哔哩哔哩)1、每一...
外挂烘培!sohoo辅助,po... 外挂烘培!sohoo辅助,pokeplus脚本-真是有辅助教程(哔哩哔哩)一、pokeplus脚本可...
外挂大纲!大菠萝免费辅助,哈糖... 外挂大纲!大菠萝免费辅助,哈糖大菠萝软件下载-切实存在有辅助工具(哔哩哔哩)1、哈糖大菠萝软件下载透...
外挂教程书!聚星ai辅助工具激... 外挂教程书!聚星ai辅助工具激活码,德普之星透视辅助软件激活码-原来有辅助技巧(哔哩哔哩)1、很好的...
外挂资料!佛手大菠萝有挂吗,拱... 外挂资料!佛手大菠萝有挂吗,拱趴大菠萝万能挂-竟然一直总是有辅助脚本(哔哩哔哩)1、超多福利:超高返...
外挂攻略!aa poker辅助... 外挂攻略!aa poker辅助,德州局透视-原来是真的有辅助教程(哔哩哔哩)1、许多玩家不知道德州局...
外挂手筋!德州局脚本,poke... 外挂手筋!德州局脚本,pokemomo辅助工具-原来是有辅助脚本(哔哩哔哩)1、玩家可以在pokem...
外挂办法!pokermaste... 外挂办法!pokermaster辅助器,pokerworld修改器-好像是真的有辅助方法(哔哩哔哩)...