[当我将dask = 1.2.2与pyarrow 0.11.1一起使用时,我没有观察到此行为。更新后(dask = 2.10.1和pyarrow = 0.15.1),当我使用带有给定partition_on和write_index参数的to_parquet方法时,无法保存索引。在这里,我创建了一个显示问题的最小示例:
from datetime import timedelta
from pathlib import Path
import dask.dataframe as dd
import pandas as pd
REPORT_DATE_TEST = pd.to_datetime('2019-01-01').date()
path = Path('/home/ludwik/Documents/YieldPlanet/research/trials/')
observations_nr = 3
dtas = range(0, observations_nr)
rds = [REPORT_DATE_TEST - timedelta(days=days) for days in dtas]
data_to_export = pd.DataFrame({
'report_date': rds,
'dta': dtas,
'stay_date': [REPORT_DATE_TEST] * observations_nr,
}) \
.set_index('dta')
data_to_export_dask = dd.from_pandas(data_to_export, npartitions=1)
file_name = 'trial.parquet'
data_to_export_dask.to_parquet(path / file_name,
engine='pyarrow',
compression='snappy',
partition_on=['report_date'],
write_index=True
)
data_read = dd.read_parquet(path / file_name, engine='pyarrow')
print(data_read)
哪个给:
| | stay_date |dta| report_date|
|0| 2019-01-01 | 2 | 2018-12-30 |
|0| 2019-01-01 | 1 | 2018-12-31 |
|0| 2019-01-01 | 0 | 2019-01-01 |
我没有在dask文档中的任何地方看到它的描述。
有人知道如何在对镶木地板数据进行分区时保存索引吗?
我似乎想避开这个问题,但是我的建议是沿索引分区。这也将确保分区中的索引不重叠。
这就像dd.from_pandas(data_to_export, npartitions=3)
,然后跳过partition_on
中的write_index
和to_parquet
。索引必须排序。
这将保留索引并正确设置分度。
请注意,您不能保证获得使用partitions
要求的确切分区数,特别是在数据集较小的情况下。)