AvroParquetOutputFormat - 无法写入包含空元素的数组
AvroParquetOutputFormat - Unable to Write Arrays with Null Elements
我正在使用 parquet-mr 库的 v1.11.1 作为 Java 应用程序的一部分
Avro 使用 AvroParquetOutputFormat 记录并将它们写入 Parquet 文件。有
具有数组类型字段的 Avro 记录将包含空元素,例如
[ "Foo", "Bar", null, "Baz"].
这是一个 Avro 架构示例:
{
"type": "record",
"name": "NullLists",
"namespace": "com.test",
"fields": [
{
"name": "KeyID",
"type": "string"
},
{
"name": "NullableList",
"type": [
"null",
{
"type": "array",
"items": [
"null",
"string"
]
}
],
"default": null
}
]
}
我正在尝试写入以下记录:
{
"KeyID": "0",
"NullableList": [
"foo",
null,
"baz"
]
}
我以为我可以使用 3 级列表编写器来支持这一点,但是,它导致
以下异常:
Caused by: java.lang.ClassCastException: repeated binary array (STRING) is not a group
at org.apache.parquet.schema.Type.asGroupType(Type.java:250)
at org.apache.parquet.avro.AvroWriteSupport$ThreeLevelListWriter.writeCollection(AvroWriteSupport.java:612)
at org.apache.parquet.avro.AvroWriteSupport$ListWriter.writeList(AvroWriteSupport.java:397)
at org.apache.parquet.avro.AvroWriteSupport.writeValueWithoutConversion(AvroWriteSupport.java:355)
at org.apache.parquet.avro.AvroWriteSupport.writeValue(AvroWriteSupport.java:278)
at org.apache.parquet.avro.AvroWriteSupport.writeRecordFields(AvroWriteSupport.java:191)
at org.apache.parquet.avro.AvroWriteSupport.write(AvroWriteSupport.java:165)
at org.apache.parquet.hadoop.InternalParquetRecordWriter.write(InternalParquetRecordWriter.java:128)
支持这种记录吗?我也试过 parquet.avro.add-list-element-records
选项也设置为 false,运气不好。
编辑:我已经创建了一个 Parquet JIRA 来跟踪这个问题。
对于那些感兴趣的人 - 这需要一个补丁,它 was merged to master here. Corresponding JIRA。
我正在使用 parquet-mr 库的 v1.11.1 作为 Java 应用程序的一部分 Avro 使用 AvroParquetOutputFormat 记录并将它们写入 Parquet 文件。有 具有数组类型字段的 Avro 记录将包含空元素,例如
[ "Foo", "Bar", null, "Baz"].
这是一个 Avro 架构示例:
{
"type": "record",
"name": "NullLists",
"namespace": "com.test",
"fields": [
{
"name": "KeyID",
"type": "string"
},
{
"name": "NullableList",
"type": [
"null",
{
"type": "array",
"items": [
"null",
"string"
]
}
],
"default": null
}
]
}
我正在尝试写入以下记录:
{
"KeyID": "0",
"NullableList": [
"foo",
null,
"baz"
]
}
我以为我可以使用 3 级列表编写器来支持这一点,但是,它导致 以下异常:
Caused by: java.lang.ClassCastException: repeated binary array (STRING) is not a group
at org.apache.parquet.schema.Type.asGroupType(Type.java:250)
at org.apache.parquet.avro.AvroWriteSupport$ThreeLevelListWriter.writeCollection(AvroWriteSupport.java:612)
at org.apache.parquet.avro.AvroWriteSupport$ListWriter.writeList(AvroWriteSupport.java:397)
at org.apache.parquet.avro.AvroWriteSupport.writeValueWithoutConversion(AvroWriteSupport.java:355)
at org.apache.parquet.avro.AvroWriteSupport.writeValue(AvroWriteSupport.java:278)
at org.apache.parquet.avro.AvroWriteSupport.writeRecordFields(AvroWriteSupport.java:191)
at org.apache.parquet.avro.AvroWriteSupport.write(AvroWriteSupport.java:165)
at org.apache.parquet.hadoop.InternalParquetRecordWriter.write(InternalParquetRecordWriter.java:128)
支持这种记录吗?我也试过 parquet.avro.add-list-element-records
选项也设置为 false,运气不好。
编辑:我已经创建了一个 Parquet JIRA 来跟踪这个问题。
对于那些感兴趣的人 - 这需要一个补丁,它 was merged to master here. Corresponding JIRA。