Pandas 如何将我的数据帧写入给定列的每个值的一个文件?

Pandas 如何将我的数据帧写入给定列的每个值的一个文件?,pandas,dask,Pandas,Dask,我有一个数据帧,它有一个名为key的列,其值从00到FF(作为字符串)。理想情况下,我会将该数据帧作为拼花地板编写为每个key值的一个或多个文件。也就是说,我不希望一个分区对键有多个可能的值 我当前的方法不起作用,因为它只生成一个文件: import dask.dataframe as dd df = dd.read_csv( "/Users/ecerulm/Downloads/test/**/*.txt.gz", include_path_

我有一个数据帧,它有一个名为
key
的列,其值从
00
FF
(作为字符串)。理想情况下,我会将该数据帧作为拼花地板编写为每个
key
值的一个或多个文件。也就是说,我不希望一个分区对
有多个可能的值

我当前的方法不起作用,因为它只生成一个文件:

import dask.dataframe as dd

df = dd.read_csv(
        "/Users/ecerulm/Downloads/test/**/*.txt.gz",
        include_path_column=True,
        sep="\t",
        compression='gzip',
        blocksize=None)
df['basename'] = (df.path.str.rpartition('/')[2])
df['MAC'] = df.basename.str.partition('.')[2]
df['MAC'] = df.MAC.str.partition('.')[0]
df['key'] = df.MAC.str[-2:]
df = df.set_index('key')
df = df.repartition(partition_size='100MB')
df = df.shuffle(['key'])

dd.to_parquet(df, './output.parquet')

有没有办法确保分区在一列上“干净地”分区(我想这样做,但似乎不能保证每个分区只包含一个
列上的
值)。

对于输出拼花地板的特定情况,您可以使用
df.to_Parquet(…,partition_)=['column\u name'])

这将产生:

output.parquet/key=00/part.0.parquet
output.parquet/key=00/...
output.parquet/key=00/part.3.parquet
...
output.parquet/key=FF/part.13.parquet
因此,它将保证
的每个值将被限制在一个目录中。如果您想最小化每个目录中
part.x.parquet
文件的数量,可以在
到(parquet
之前添加
df.repartition()

df = df.repartition(partition_size='100MB')
dd.to_parquet(df, './output.parquet', partition_on=['key'])

对于输出拼花地板的特定情况,您可以使用
df.to_Parquet(…,partition_on=['column_name'])

这将产生:

output.parquet/key=00/part.0.parquet
output.parquet/key=00/...
output.parquet/key=00/part.3.parquet
...
output.parquet/key=FF/part.13.parquet
因此,它将保证
的每个值将被限制在一个目录中。如果您想最小化每个目录中
part.x.parquet
文件的数量,可以在
到(parquet
之前添加
df.repartition()

df = df.repartition(partition_size='100MB')
dd.to_parquet(df, './output.parquet', partition_on=['key'])