用 pyarrow 将大 pandas 数据帧写成镶木地板
Write large pandas dataframe as parquet with pyarrow
我正在尝试编写一个大型 pandas 数据框(形状 4247x10)
没什么特别的,只是使用下一个代码:
df_base = read_from_google_storage()
df_base.to_parquet(courses.CORE_PATH,
engine='pyarrow',
compression='gzip',
partition_cols=None)
我尝试使用不同的压缩,不同的 partition_cols 但还是失败了。
我提到它适用于小型数据帧 (1000x10<),并且在我调试并留出足够时间时它也适用,但在我的情况下我收到错误:
Process finished with exit code 139 (interrupted by signal 11: SIGSEGV)
我正在使用的库:
pandas==0.25.3
pyarrow==0.15.1
问题可能与此有关:https://issues.apache.org/jira/browse/PARQUET-1345但我不确定。
这是我找到的解决方法:
from pyarrow import Table
from pyarrow import parquet as pq
df_base = pd.read_csv('big_df.csv')
table = Table.from_pandas(df_base, nthreads=1)
print(table.columns)
print(table.num_rows)
pq.write_table(table, courses.CORE_PATH, compression='GZIP')
我不确定它为什么会失败,但是设置 nthreads=1
有助于避免 SIGSEGV(分段错误)
我正在尝试编写一个大型 pandas 数据框(形状 4247x10)
没什么特别的,只是使用下一个代码:
df_base = read_from_google_storage()
df_base.to_parquet(courses.CORE_PATH,
engine='pyarrow',
compression='gzip',
partition_cols=None)
我尝试使用不同的压缩,不同的 partition_cols 但还是失败了。
我提到它适用于小型数据帧 (1000x10<),并且在我调试并留出足够时间时它也适用,但在我的情况下我收到错误:
Process finished with exit code 139 (interrupted by signal 11: SIGSEGV)
我正在使用的库:
pandas==0.25.3
pyarrow==0.15.1
问题可能与此有关:https://issues.apache.org/jira/browse/PARQUET-1345但我不确定。
这是我找到的解决方法:
from pyarrow import Table
from pyarrow import parquet as pq
df_base = pd.read_csv('big_df.csv')
table = Table.from_pandas(df_base, nthreads=1)
print(table.columns)
print(table.num_rows)
pq.write_table(table, courses.CORE_PATH, compression='GZIP')
我不确定它为什么会失败,但是设置 nthreads=1
有助于避免 SIGSEGV(分段错误)