apache / apache/arrow

PyArrow SIGSEGV error when using UnionDatasets

Open
#30,562 4 comments 0 reactions 0 assignees View on GitHub
Component: Python Type: bug
Dominant language
C++
Stars
17.1k
Forks
4.3k
Avg merge
3d 13h
Merged PRs (30d)
88

Description

### The context:
I am using PyArrow to read a folder structured as `exchange/symbol/date.parquet`. The folder contains multiple exchanges, multiple symbols and multiple files. At the time I am writing the folder is about 30GB/1.85M files.

If I use a single PyArrow Dataset to read/manage the entire folder, the simplest process with just the dataset defined will occupy 2.3GB of RAM. The problem is, I am instanciating this dataset on multiple processes but since every process only needs some exchanges (typically just one), I don't need to read all folders and files in every single process.

So I tried to use a UnionDataset composed of single exchange Dataset. In this way, every process just loads the required folder/files as a dataset. By a simple test, by doing so every process now occupy just 868MB of RAM, -63%.

### The problem:
When using a single Dataset for the entire folder/files, I have no problem at all. I can read filtered data without problems and it's fast as duck.

But when I read the UnionDataset filtered data, I always get `Process finished with exit code 139 (interrupted by signal 11: SIGSEGV` error. So after looking every single source of the problem, I noticed that if I create a dummy folder with multiple exchanges but just some symbols, in order to limit the files amout to read, I don't get that error and it works normally. If I then copy new symbols folders (any) I get again that error.

I came up thinking that the problem is not about my code, but linked instead to the amout of files that the UnionDataset is able to manage.

Am I correct or am I doing something wrong? Thank you all, have a nice day and good work.

**Environment**: Fedora Linux 35 (Workstation Edition), AMD Ryzen 5950X.
**Reporter**: [Thomas Cercato](https://issues.apache.org/jira/browse/ARROW-15045)

**Note**: *This issue was originally created as [ARROW-15045](https://issues.apache.org/jira/browse/ARROW-15045). Please see the [migration documentation](https://github.com/apache/arrow/issues/14542) for further details.*

Contributor guide

Open the contributing guide

Research direction

No source file or test is named. Start with a reduced UnionDataset reproduction using the exchange/symbol/date.parquet layout, compare it with a single Dataset, and investigate the filtered read that produces SIGSEGV. Done means the reported multi-exchange, many-file case no longer crashes and has a regression test.

Written by the indexing model from the issue text.

Assessment

Tech stack
cpp, python
Domain
data-engineering
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
28/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.