在dask中设置Parquet输出文件的大小

时间:2018-07-09 15:39:36

标签: python parquet filesize dask

使用dask dataframe to_parquet方法时,是否有任何方法可以设置默认镶木地板文件的大小(例如在spark中)?

我的问题是,当我使用partition_on kwarg保存该文件时,每个分区目录都得到几个小文件,因此使用“ Amazon Athena”导致查询速度非常慢。

每个分区目录的中间期望结果(如果没有文件大小控制)是n个文件(现在1个就足够了)。

我想保证每个分区目录1个文件的唯一方法是重新分区到一个分区,然后使用to_parquet方法(但是效率很低)。

还有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

当前行为是设计使然,允许每个工作进程独立处理分区,并写入没有其他进程正在写入的文件。否则,在为每个目录编写之后都将需要某种锁定,或者需要执行一些合并步骤。

您可以做的是使用set_index将数据按要分区的列的每个值随机整理到一个分区中(也许使用divisions=关键字);现在to_parquet将为每个值生成一个文件。如果您希望文件自动以正确的目录结尾并且修剪了现在冗余的索引,则需要使用to_delayed()并创建一个延迟函数,该函数需要一个分区(pandas数据帧)并写入正确的位置。