gpt4 book ai didi

java - 在具有不同字段名称的 Java 类上映射 Avro 文件

转载 作者:搜寻专家 更新时间:2023-11-01 03:16:30 24 4
gpt4 key购买 nike

我遇到了一个简单的 spark 任务问题,它读取 Avro 文件,然后将其保存为 Hive Parquet 表。

我有两种类型的文件,一般来说它们是相同的,但关键结构有点不同 - 字段名称。

类型 1

root
|-- pk: strucnt (nullable = true)
|-- term_id: string (nullale = true)

类型 2

root
|-- pk: strucnt (nullable = true)
|-- id: string (nullale = true)

我正在使用 spark-avro 阅读 Avro。然后像这样将这个 DF 映射到 bean

Dataset<SomeClass> df = avroDF.as(Encoders.bean(SomeClass.class));

SomeClass 是一个带有 getter 和 setter 的简单单字段类。

public class SomeClass{
private String term_id;
...
}

因此,如果我正在阅读 Avro 类型 1 - 没关系。但是如果我正在阅读 Avro type 2 - 就会发生错误。反之亦然,如果我将字段名称更改为 private String id;

我的问题有通用的解决方案吗?我找到了@AvroName,但它不允许设置多个名称。谢谢。

最佳答案

只有一种方法是将数据集字段名更改为架构中的名称。使用这个例子来做:

val newName = Seq("id", "x1", "x2", "x3")
Dataset<SomeClass> df = avroDF.toDF(newNames: _*).as(Encoders.bean(SomeClass.class));

您不能将数据帧转换为具有不同字段名称的 BeanClass。

关于java - 在具有不同字段名称的 Java 类上映射 Avro 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48496550/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com