[C++] 1.4.1 library allows creation of parquet file w/NULL values for INT types
- 主要言語
- Java
- スター
- 3.1k
- フォーク
- 1.6k
- 平均マージ
- 3日 12時間
- マージ済み PR(30日)
- 33
説明
The parquet-cpp v1.4.1 library allows generation of parquet files with NULL values for INT type columns which causes unexpected parsing errors in downstream systems ingesting those files.
e.g.,
`Error parsing the parquet file: UNKNOWN can not be applied to a primitive type`
**Reproduction Steps**
OS: CentOS 7.5.1804
Python: 3.4.8
Prerequisites:
- Install the following packages: `Numpy: 1.14.5`, `Pandas: 0.22.0`, `PyArrow: 0.9.0`
Step 1
Generate the parquet file.
`sample_w_null.csv`
```Java
col1,col2,col3,col4,col5
1,2,,4,5
```
`parquet-1361-repro-1.py`
{code}
#!/usr/bin/python
import numpy as np
import pyarrow as pa
import pyarrow.parquet as pq
import pandas as pd
input_file = 'sample_w_null.csv'
output_file = 'int_unknown.parquet'
p_schema = {'col1': np.int32,
'col2': np.int32,
'col3': np.unicode_,
'col4': np.int32,
'col5': np.int32}
df = pd.read_csv(input_file, dtype=p_schema)
table = pa.Table.from_pandas(df)
pq.write_table(table, output_file)
```Java
+Step 2+
Inspect the metadata of the generated file.
{{parquet-1361-repro-2.py}}
```
#!/usr/bin/python
import pyarrow.parquet as pq
for filename in ['int_unknown.parquet']:
pq_file = pq.ParquetFile(filename)
print(pq_file.metadata)
print(pq_file.schema)
print(pq_file.num_row_groups)
print(pq.read_table(filename, columns=['col1','col2','col3','col4','col5']).to_pandas())
```Java
Results
```
created_by: parquet-cpp version 1.4.1-SNAPSHOT
num_columns: 6
num_rows: 1
num_row_groups: 1
format_version: 1.0
serialized_size: 1434
col1: INT32
col2: INT32
col3: INT32 UNKNOWN
col4: INT32
col5: INT32
__index_level_0__: INT64
1
col1 col2 col3 col4 col5
0 1 2 None 4 5
{code}
**Reporter**: [Ken Terada](https://issues.apache.org/jira/secure/ViewProfile.jspa?name=spherified)
#### Original Issue Attachments:
- [parquet-1361-repro-1.py](https://issues.apache.org/jira/secure/attachment/12933498/parquet-1361-repro-1.py)
- [parquet-1361-repro-2.py](https://issues.apache.org/jira/secure/attachment/12933499/parquet-1361-repro-2.py)
- [sample_w_null.csv](https://issues.apache.org/jira/secure/attachment/12933500/sample_w_null.csv)
**Note**: *This issue was originally created as [PARQUET-1361](https://issues.apache.org/jira/browse/PARQUET-1361). Please see the [migration documentation](https://issues.apache.org/jira/browse/PARQUET-2502) for further details.*
コントリビューションガイド
このリポジトリのコントリビューションガイドは索引されていません
調査の方向性
parquet-1361-repro-1.py と sample_w_null.csv から始めて生成されたファイルを再現し、次に parquet-1361-repro-2.py を使ってそのスキーマと NULL の扱いを調べます。INT32 UNKNOWN 列を担当する書き込みパスを追跡し、結果を期待される Parquet メタデータと比較します。nullable INT 列が無効な UNKNOWN プリミティブ型を生成しなくなり、再現結果を下流で読み取れるようになれば完了です。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- cpp, pandas, python
- 領域
- data-engineering, databases
- issue の種類
- バグ
- 難易度
- 4/5
- 見積もり時間
- 3〜5日
- 活発さ
- 停滞
- 明瞭さ
- おおむね明確
- 初心者へのやさしさ
- 25/100