apache / apache/parquet-java

Schema change results in exception - java.lang.ClassCastException

Offen
#2,365 3 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
Component: Avro Component: Parquet Priority: Major Type: bug
Vorherrschende Sprache
Java
Sterne
3.1k
Forks
1.6k
Ø Merge
3 T. 12 Std.
Gemergte PRs (30 T.)
33

Beschreibung

Following exception was seen with parquet 1.8.1 (and in parquet 1.12.0, when trying to reproduce it).

Exception in thread "main" java.lang.ClassCastException: optional binary phone_number (STRING) is not a group
at com.uber.komondor.shaded.org.apache.parquet.schema.Type.asGroupType(Type.java:250)
at com.uber.komondor.shaded.org.apache.parquet.avro.AvroRecordConverter.newConverter(AvroRecordConverter.java:279)
at com.uber.komondor.shaded.org.apache.parquet.avro.AvroRecordConverter.newConverter(AvroRecordConverter.java:232)
at com.uber.komondor.shaded.org.apache.parquet.avro.AvroRecordConverter.access$100(AvroRecordConverter.java:78)
at org.apache.parquet.avro.AvroRecordConverter$AvroCollectionConverter$ElementConverter.(AvroRecordConverter.java:536)
at org.apache.parquet.avro.AvroRecordConverter$AvroCollectionConverter.(AvroRecordConverter.java:486)
at org.apache.parquet.avro.AvroRecordConverter.newConverter(AvroRecordConverter.java:289)
at org.apache.parquet.avro.AvroRecordConverter.(AvroRecordConverter.java:141)
at org.apache.parquet.avro.AvroRecordConverter.newConverter(AvroRecordConverter.java:279)
at org.apache.parquet.avro.AvroRecordConverter.(AvroRecordConverter.java:141)
at org.apache.parquet.avro.AvroRecordConverter.(AvroRecordConverter.java:95)
at org.apache.parquet.avro.AvroRecordMaterializer.(AvroRecordMaterializer.java:33)
at org.apache.parquet.avro.AvroReadSupport.prepareForRead(AvroReadSupport.java:138)
at org.apache.parquet.hadoop.InternalParquetRecordReader.initialize(InternalParquetRecordReader.java:183)
at org.apache.parquet.hadoop.ParquetReader.initReader(ParquetReader.java:156)
at org.apache.parquet.hadoop.ParquetReader.read(ParquetReader.java:135)
at util.ParquetToAvroSchemaConverter$.convert(ParquetToAvroSchemaConverter.scala:46)
at util.ParquetToAvroSchemaConverter$.main(ParquetToAvroSchemaConverter.scala:20)
at util.ParquetToAvroSchemaConverter.main(ParquetToAvroSchemaConverter.scala)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.hadoop.util.RunJar.run(RunJar.java:221)
at org.apache.hadoop.util.RunJar.main(RunJar.java:136)

Original exception was triggered by the following schema change.
Schema Before change:
{
"default": null,
"name": "master_cluster",
"type": [
"null",
{
"fields": [
{
"name": "uuid",
"type": "string"
},
{
"name": "namespace",
"type": "string"
},
{
"name": "version",
"type": "long"
}
],
"name": "master_cluster",
"type": "record"
}
]
},

After schema change:
{
"default": null,
"name": "master_cluster",
"type": [
"null",
{
"fields": [
{
"default": null,
"name": "uuid",
"type": [
"null",
"string"
]
},
{
"default": null,
"name": "namespace",
"type": [
"null",
"string"
]
},
{
"default": null,
"name": "version",
"type": [
"null",
"long"
]
}
],
"name": "VORGmaster_cluster",
"type": "record"
}
]
},

We were suspecting PARQUET-1441 could be in play and tried to reproduce the issue on parquet-1.12.0 and seeing the same exception.

During the repro noticed that issue could be with avroSchema conversion (field name was substituted with generic name "array"). While we look into this further, want to get community input on whether this is a known issue and any thoughts on path forward.

19/09/12 22:34:37 DEBUG avro.SchemaCompatibility: Checking compatibility of reader {"type":"record","name":"IDphones_items","fields":[{"name":"phone_number","type":["null","string"],"default":null}]} with writer {"type":"record","name":"array","fields":[{"name":"phone_number","type":["null","string"],"default":null}]}

**Environment**: Hoodie/Parquet/Avro

Parquet-1.8.1

Avro-1.7.6
**Reporter**: [Balajee Nagasubramaniam](https://issues.apache.org/jira/secure/ViewProfile.jspa?name=balajeeUber)
**Assignee**: [Xinli Shang](https://issues.apache.org/jira/secure/ViewProfile.jspa?name=shangx@uber.com) / @shangxinli
#### Externally tracked issue: [https://issues.apache.org/jira/browse/PARQUET-1681](https://issues.apache.org/jira/browse/PARQUET-1681)

**Note**: *This issue was originally created as [PARQUET-1656](https://issues.apache.org/jira/browse/PARQUET-1656). Please see the [migration documentation](https://issues.apache.org/jira/browse/PARQUET-2502) for further details.*

Beitragsleitfaden

Für dieses Repository ist kein Beitragsleitfaden indexiert

Rechercherichtung

Beginne mit den Einstiegspunkten des Stacktraces in AvroRecordConverter und AvroReadSupport und untersuche anschließend util.ParquetToAvroSchemaConverter.scala an den gemeldeten Konvertierungszeilen. Vergleiche die Schemas vor und nach der Änderung sowie die protokollierten Reader-/Writer-Schemas und prüfe das extern nachverfolgte PARQUET-1681-Issue, um den aktuellen Status und die Definition of done zu bestimmen.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
java
Bereich
data-engineering
Issue-Typ
Bug
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Veraltet
Klarheit
Muss geklärt werden
Anfängerfreundlichkeit
35/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.