NegativeArraySizeException on read for parquet files written with large strings in some cases
- 主要言語
- Java
- スター
- 3.1k
- フォーク
- 1.6k
- 平均マージ
- 3日 12時間
- マージ済み PR(30日)
- 33
説明
On Spark 3.3.1 which uses parquet 1.12.2, parquet files were successfully created using default parquet configs. Note: the write succeeded, so this is not the same as: https://issues.apache.org/jira/browse/PARQUET-1632
The payload had large strings and this resulted in the following exception on read:
```java
Caused by: java.lang.NegativeArraySizeException
at org.apache.parquet.bytes.BytesInput$StreamBytesInput.toByteArray(BytesInput.java:262)
at org.apache.parquet.bytes.BytesInput.toByteBuffer(BytesInput.java:214)
at org.apache.parquet.bytes.BytesInput.toInputStream(BytesInput.java:223)
at org.apache.parquet.column.impl.ColumnReaderImpl.readPageV1(ColumnReaderImpl.java:592)
at org.apache.parquet.column.impl.ColumnReaderImpl.access$300(ColumnReaderImpl.java:57)
at org.apache.parquet.column.impl.ColumnReaderImpl$3.visit(ColumnReaderImpl.java:536)
at org.apache.parquet.column.impl.ColumnReaderImpl$3.visit(ColumnReaderImpl.java:533)
at org.apache.parquet.column.page.DataPageV1.accept(DataPageV1.java:95)
```
The issue could be addressed with the following configs:
```java
parquet.page.size.row.check.min=1
parquet.page.size.row.check.max=1000
parquet.page.size.check.estimate=false
spark.sql.parquet.columnarReaderBatchSize=2098
```
**Reporter**: [Atul Felix Payapilly](https://issues.apache.org/jira/secure/ViewProfile.jspa?name=atulpayapilly_amazon)
**Note**: *This issue was originally created as [PARQUET-2367](https://issues.apache.org/jira/browse/PARQUET-2367). Please see the [migration documentation](https://issues.apache.org/jira/browse/PARQUET-2502) for further details.*
コントリビューションガイド
このリポジトリのコントリビューションガイドは索引されていません
調査の方向性
まず、大きな文字列を含む Parquet データで読み取り失敗を再現し、スタックトレースにある BytesInput$StreamBytesInput.toByteArray、ColumnReaderImpl.readPageV1、DataPageV1.accept を調査します。記載されているページサイズと Spark reader の設定で動作を比較します。失敗する読み取りを理解し、NegativeArraySizeException を発生させずに回帰テストでカバーできれば完了です。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- java
- 領域
- data-engineering
- issue の種類
- バグ
- 難易度
- 4/5
- 見積もり時間
- 3〜5日
- 活発さ
- 停滞
- 明瞭さ
- おおむね明確
- 初心者へのやさしさ
- 28/100