npartitions 在 Dask 数据帧中的作用是啥?

Posted

技术标签:

【中文标题】npartitions 在 Dask 数据帧中的作用是啥?【英文标题】:What is the role of npartitions in a Dask dataframe?npartitions 在 Dask 数据帧中的作用是什么? 【发布时间】:2018-03-20 14:32:21 【问题描述】:

我在很多函数中都看到了参数npartitions,但我不明白它有什么用/有什么用。

http://dask.pydata.org/en/latest/dataframe-api.html#dask.dataframe.read_csv

头(...)

元素仅取自第一个 npartition,默认值为 1。如果第一个 npartition 中的行数少于 n,则会发出警告并返回任何找到的行。传递 -1 以使用所有分区。

重新分区(...)

输出的分区数,必须小于输入的 npartitions。仅在未指定除法时使用。

在这种情况下分区数可能是5:

(图片来源:http://dask.pydata.org/en/latest/dataframe-overview.html)

【问题讨论】:

【参考方案1】:

npartitions 属性是组成单个 Dask 数据帧的 Pandas 数据帧的数量。这主要以两种方式影响性能。

    如果您没有足够的分区,那么您可能无法有效地使用所有内核。例如,如果您的 dask.dataframe 只有一个分区,则一次只能运行一个核心。 如果您有太多分区,那么调度程序可能会产生大量开销来决定在哪里计算每个任务。

通常,您需要的分区数是核心数的几倍。每个任务在调度程序中占用几百微秒。

您可以在数据提取时使用read_csv(...) 中的blocksize= 等参数确定分区数,也可以在之后使用.repartition(...) 方法确定分区数。

【讨论】:

以上是关于npartitions 在 Dask 数据帧中的作用是啥?的主要内容,如果未能解决你的问题,请参考以下文章

从 Dask 数据帧中获取一行而不将整个数据帧加载到内存中

有效分区 dask 数据帧的策略

从 len 18000 的 Dask 数据帧中采样 n = 2000 会产生错误 当“replace = False”时无法采用比总体更大的样本

如何将多个功能应用于dask数据帧的多个块?

使用 dask.dataframe 从 CSV 文件中按分区读取尾部

如何将单个镶木地板文件从 s3 读入 dask 数据帧?