dask 数据帧的延迟重新分区
Lazy repartitioning of dask dataframe
在延迟数据帧处理的几个阶段之后,我需要在保存数据帧之前对其进行重新分区。但是,.repartition()
方法要求我知道分区的数量(而不是分区的大小),这取决于处理后数据的大小,这是未知的。
我想我可以通过 df.memory_usage().sum()
来延迟计算大小,但是 repartition()
似乎不接受它(标量)作为参数。
有没有办法进行这种自适应(基于数据大小)的惰性重新分区?
PS。由于这是我管道中的(几乎)最后一步,我可能可以通过转换为延迟和重新分区 "manually" 来解决这个问题(我不需要返回到数据帧),但我正在寻找一个更简单的方法。
PS。按分区大小重新分区也是一个非常有用的功能
不幸的是,Dask 的任务图构建会立即发生,并且无法以分区数量无法立即获知或延迟计算的方式进行分区(或执行任何操作)。
您可以按照您的建议,切换到延迟等较低级别的系统。在这种情况下,我会切换到使用 futures 并跟踪结果的大小,从而即时触发适当的分区合并。这可能比预期的要复杂得多。
在延迟数据帧处理的几个阶段之后,我需要在保存数据帧之前对其进行重新分区。但是,.repartition()
方法要求我知道分区的数量(而不是分区的大小),这取决于处理后数据的大小,这是未知的。
我想我可以通过 df.memory_usage().sum()
来延迟计算大小,但是 repartition()
似乎不接受它(标量)作为参数。
有没有办法进行这种自适应(基于数据大小)的惰性重新分区?
PS。由于这是我管道中的(几乎)最后一步,我可能可以通过转换为延迟和重新分区 "manually" 来解决这个问题(我不需要返回到数据帧),但我正在寻找一个更简单的方法。
PS。按分区大小重新分区也是一个非常有用的功能
不幸的是,Dask 的任务图构建会立即发生,并且无法以分区数量无法立即获知或延迟计算的方式进行分区(或执行任何操作)。
您可以按照您的建议,切换到延迟等较低级别的系统。在这种情况下,我会切换到使用 futures 并跟踪结果的大小,从而即时触发适当的分区合并。这可能比预期的要复杂得多。