Hacktoberfest 2026: những issue maintainer đã đánh dấu cho tháng Mười, đang mở và phù hợp người mới. Xem issue Hacktoberfest

[parquet-java] Intermittent out-of-bounds dictionary ID when reading dictionary-encoded Parquet pages

Đang mở
#3,715 0 bình luận 0 reaction 0 người được giao Xem trên GitHub

Maintainer thường phản hồi trong vòng 2 ngày

Chưa có ai nhận issue này.

Đánh giá

Độ khó
4/5
Thời gian dự kiến
3-5 ngày
Mức phù hợp với người mới
42/100
Loại issue
Lỗi
Độ rõ ràng
Cần làm rõ
Mức độ hoạt động
Ít trao đổi
Công nghệ
java
Lĩnh vực
data-engineering

Hướng nghiên cứu

Bắt đầu với PlainValuesDictionary.decodeToInt, DictionaryValuesReader.readInteger và chuỗi lệnh gọi của ColumnReaderBase được hiển thị trong stack trace. Điều tra cách các ID của dictionary được tạo ra khi đọc các page được mã hóa bằng dictionary, sử dụng dictionary gồm 13 mục được báo cáo và ID 14 làm trường hợp tham chiếu. Được xem là hoàn tất khi các page bị ảnh hưởng có thể được đọc mà không xảy ra truy cập dictionary vượt quá giới hạn và lỗi không liên tục được bao phủ bằng một regression test.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

Type: bug
Describe the bug, including details regarding any error messages, version, and platform.

Description

We intermittently encounter a ParquetDecodingException when reading Parquet files written by Apache Hudi with Spark.

The issue cannot be reproduced consistently for every write, but it has occurred repeatedly across different write jobs.

The failures have a similar call chain: while reading a dictionary-encoded data page, parquet-java decodes a dictionary ID that is outside the range of the current dictionary. PlainValuesDictionary then attempts to access the dictionary array with that ID and throws an ArrayIndexOutOfBoundsException.

In the representative case below, the affected column is:

optional int32 chan_second_cate_cd

The dictionary contains 13 entries, so the valid dictionary IDs are 0 through 12. However, the data page produces dictionary ID 14, resulting in:

java.lang.ArrayIndexOutOfBoundsException: Index 14 out of bounds for length 13

This failure occurs in row group 0, at column value 292293 out of 478848, and at value 12293 out of 20000 in the current data page.

The value 14 is an internal Parquet dictionary ID, not the actual value stored in the column.

Environment

Component Version
Apache Hudi 0.13.1
Write engine Apache Spark 3.4
parquet-mr 1.12.3

Representative Stack Trace

Click to expand
org.apache.parquet.io.ParquetDecodingException: Can not read value at 292293 in block 0 in file <sanitized-parquet-file-path>
    at org.apache.parquet.hadoop.InternalParquetRecordReader.nextKeyValue(InternalParquetRecordReader.java:264)
    at org.apache.parquet.hadoop.ParquetRecordReader.nextKeyValue(ParquetRecordReader.java:207)
    at org.apache.spark.sql.execution.datasources.RecordReaderIterator.hasNext(RecordReaderIterator.scala:39)
    at org.apache.spark.sql.execution.datasources.RecordReaderIterator$$anon$1.hasNext(RecordReaderIterator.scala:61)
    at org.apache.spark.sql.execution.datasources.FileScanRDD$$anon$1.hasNext(FileScanRDD.scala:125)
    at scala.collection.Iterator$$anon$10.hasNext(Iterator.scala:460)
    at org.apache.spark.sql.catalyst.expressions.GeneratedClass$GeneratedIteratorForCodegenStage1.processNext(Unknown Source)
    at org.apache.spark.sql.execution.BufferedRowIterator.hasNext(BufferedRowIterator.java:43)
    at org.apache.spark.sql.execution.WholeStageCodegenExec$$anon$1.hasNext(WholeStageCodegenExec.scala:760)
    at org.apache.spark.shuffle.sort.BypassMergeSortShuffleWriter.write(BypassMergeSortShuffleWriter.java:140)
    at org.apache.spark.shuffle.ShuffleWriteProcessor.write(ShuffleWriteProcessor.scala:59)
    at org.apache.spark.scheduler.ShuffleMapTask.runTask(ShuffleMapTask.scala:101)
    at org.apache.spark.scheduler.Task.run(Task.scala:140)
    at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:565)

Caused by: org.apache.parquet.io.ParquetDecodingException: Can't read value in column [chan_second_cate_cd] optional int32 chan_second_cate_cd at value 292293 out of 478848, 12293 out of 20000 in currentPage. repetition level: 0, definition level: 1
    at org.apache.parquet.column.impl.ColumnReaderBase.readValue(ColumnReaderBase.java:553)
    at org.apache.parquet.column.impl.ColumnReaderImpl.readValue(ColumnReaderImpl.java:30)
    at org.apache.parquet.column.impl.ColumnReaderBase.writeCurrentValueToConverter(ColumnReaderBase.java:439)
    at org.apache.parquet.column.impl.ColumnReaderImpl.writeCurrentValueToConverter(ColumnReaderImpl.java:30)
    at org.apache.parquet.io.RecordReaderImplementation.read(RecordReaderImplementation.java:406)
    at org.apache.parquet.hadoop.InternalParquetRecordReader.nextKeyValue(InternalParquetRecordReader.java:234)

Caused by: java.lang.ArrayIndexOutOfBoundsException: Index 14 out of bounds for length 13
    at org.apache.parquet.column.values.dictionary.PlainValuesDictionary$PlainIntegerDictionary.decodeToInt(PlainValuesDictionary.java:251)
    at org.apache.parquet.column.values.dictionary.DictionaryValuesReader.readInteger(DictionaryValuesReader.java:108)
    at org.apache.parquet.column.impl.ColumnReaderBase$2$3.read(ColumnReaderBase.java:279)
    at org.apache.parquet.column.impl.ColumnReaderBase.readValue(ColumnReaderBase.java:533)
Component(s)

No response

Ngôn ngữ chính
Java
Star
3.1k
Fork
1.6k
Merge trung bình
4 ngày 5 giờ
Pull request đã merge (30 ngày)
30

Chuẩn bị môi trường

  • Không có Dockerfile hay tệp Docker Compose
  • Có mẫu pull request
  • Không có hướng dẫn đóng góp

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của apache/parquet-java

Tất cả issue của apache/parquet-java

Issue tương tự

Thêm issue về Java

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.