dask.dataframe.to_parquet
dask.dataframe.to_parquet¶
- dask.dataframe.to_parquet(df, path, engine='auto', compression='snappy', write_index=True, append=False, overwrite=False, ignore_divisions=False, partition_on=None, storage_options=None, custom_metadata=None, write_metadata_file=None, compute=True, compute_kwargs=None, schema='infer', name_function=None, filesystem=None, **kwargs)[源代码]¶
将 Dask.dataframe 存储到 Parquet 文件
- 参数
- dfdask.dataframe.DataFrame
- 路径字符串或 pathlib.Path
数据的目标目录。对于远程数据,请在前面加上协议,如
s3://
或hdfs://
。- 引擎{‘auto’, ‘pyarrow’}
要使用的 Parquet 库。默认为 ‘auto’,如果安装了
pyarrow
,则使用它,否则回退到已弃用的fastparquet
。请注意,fastparquet
不支持pyarrow
提供的所有功能。第三方包(例如 CuDF)也使用此选项来注入自定义引擎。- 压缩字符串或字典,默认值为 ‘snappy’
可以是像
"snappy"
这样的字符串,或者是将列名映射到压缩器的字典,例如{"name": "gzip", "values": "snappy"}
。默认为"snappy"
。- 写入索引布尔值,默认值为 True
是否写入索引。默认为 True。
- 追加bool, 默认 False
如果为 False(默认),则从头构建数据集。如果为 True,则向现有数据集添加新的行组。在后一种情况下,数据集必须存在,并且模式必须与输入数据匹配。
- 覆盖bool, 默认 False
是否在写入数据集之前删除 path 的内容。默认值为 False。如果为 True,指定的路径必须对应一个目录(但不能是当前工作目录)。如果 append=True,则不能将此选项设置为 True。注意:即使当前写操作失败,overwrite=True 也会删除原始数据。请自行承担使用风险。
- 忽略部分bool, 默认 False
如果为 False(默认),当先前的分区与新追加的分区重叠时会引发错误。如果 append=False,则忽略此设置。
- partition_on列表,默认 None
通过在这些字段的值上进行拆分来构建基于目录的分区。每个dask分区将产生一个或多个数据文件,不会有全局分组。
- 存储选项dict, 默认 None
如果有的话,传递给文件系统后端的键/值对。
- 自定义元数据dict, 默认 None
自定义键/值元数据,包含在所有页脚元数据中(如果适用,还包含在全局“_metadata”文件中)。请注意,自定义元数据不能包含保留的 b”pandas” 键。
- write_metadata_file布尔值或无,默认无
是否编写特殊的
_metadata
文件。如果为None
(默认),则只有在append=True
且数据集已经有一个_metadata
文件时,才会编写_metadata
文件。- 计算bool, 默认 True
如果
True``(默认),则立即计算结果。如果 ``False
,则返回一个dask.dataframe.Scalar
对象以供将来计算。- compute_kwargs字典, 默认 True
传递给计算方法的选项
- 模式pyarrow.Schema, dict, “infer”, 或 None, 默认 “infer”
用于输出数据集的全局模式。默认为“infer”,将从dask dataframe元数据中推断模式。这通常足以满足常见的模式,但特别地,对于包含非字符串的``object`` dtype列将失败。这些列将需要指定显式模式。可以通过传递列名到pyarrow类型的字典来覆盖部分列的模式(例如``schema={“field”: pa.string()}``);此字典中不存在的列仍将自动推断。或者,可以传递完整的``pyarrow.Schema``,在这种情况下不会进行模式推断。传递``schema=None``将禁用全局文件模式的使用 - 每个写入的文件可能使用不同的模式,具体取决于相应分区的dtypes。
- name_function可调用对象,默认为 None
用于生成每个输出分区文件名的函数。该函数应接受一个整数(分区索引)作为输入,并返回一个字符串,该字符串将用作相应分区的文件名。应保持分区字典序。如果未指定,文件将使用约定
part.0.parquet
、part.1.parquet
、part.2.parquet
等为 DataFrame 中的每个分区创建。- 文件系统: 使用“fsspec”、“arrow”或 fsspec.AbstractFileSystem 后端。
- **kwargs
传递给特定后端的额外选项。
参见
read_parquet
读取 parquet 数据到 dask.dataframe
注释
每个分区将被写入一个单独的文件。
示例
>>> df = dd.read_csv(...) >>> df.to_parquet('/path/to/output/', ...)
默认情况下,文件将使用约定
part.0.parquet
、part.1.parquet
、part.2.parquet
等在指定的输出目录中创建,每个分区对应一个文件。要自定义每个文件的名称,可以使用name_function=
关键字参数。传递给name_function
的函数将用于为每个分区生成文件名,并且应该期望输入一个分区的索引整数并返回一个字符串,该字符串将用作相应分区的文件名。name_function
生成的字符串必须保持其各自分区索引的顺序。例如:
>>> name_function = lambda x: f"data-{x}.parquet" >>> df.to_parquet('/path/to/output/', name_function=name_function)
将导致以下文件被创建:
/path/to/output/ ├── data-0.parquet ├── data-1.parquet ├── data-2.parquet └── ...