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

相关内容

热门资讯

我来教大家!边锋杭麻圈辅助,德... 1、我来教大家!边锋杭麻圈辅助,德扑之星透视软件方法,详细有挂(有挂技巧)-哔哩哔哩。2、边锋杭麻圈...
普及知识(德扑之星模拟器)外挂... 普及知识(德扑之星模拟器)外挂透明挂辅助软件(德州)透视辅助(2023已更新)(哔哩哔哩);人气非常...
实测必看!边锋杭麻圈有挂(We... 实测必看!边锋杭麻圈有挂(WePoKer),太坑了竟然真的有挂(有挂教程)-哔哩哔哩这是由厦门游乐互...
透视有挂!边锋麻将有挂,wep... 1、透视有挂!边锋麻将有挂,wepoker真的能透视,详细有挂(有挂透明)-哔哩哔哩。2、边锋麻将有...
教程辅助(Wepoke工具)外... 教程辅助(Wepoke工具)外挂透明挂辅助工具(软件)德州ai机器人(2022已更新)(哔哩哔哩);...
揭秘攻略!雀神广东麻将神器软件... 《雀神广东麻将神器软件哪里买软件透明挂》是一款多人竞技的雀神广东麻将神器软件哪里买辅助透视游戏,你将...
透视数据!边锋斗地主透明器,w... 《边锋斗地主透明器软件透明挂》是一款多人竞技的边锋斗地主透明器辅助透视游戏,你将微扑克对手来到同一个...
实测必看!川麻圈辅助工具(we... 实测必看!川麻圈辅助工具(wepoKe),太坑了原来是真的有挂(有挂规律)-哔哩哔哩;川麻圈辅助工具...
玩家攻略(靠谱WPK)外挂透明... 靠谱WPK新手教程相关信息汇总(需添加指定薇757446909获取下载链接);玩家攻略(靠谱WPK)...
教学盘点!广东雀神麻将让系统发... 教学盘点!广东雀神麻将让系统发好牌(辅助挂)太坑了竟然是真的有挂(有挂规律)-哔哩哔哩;玩家必备必赢...