【问题标题】:Read only Pandas dataset in Dask DistributedDask Distributed 中的只读 Pandas 数据集
【发布时间】:2018-04-25 17:40:57
【问题描述】:

TL;DR
我想允许工作人员使用分散的 Pandas Dataframe,但不允许他们改变任何数据。在下面查看示例代码。这可能吗? (或者这是一个纯粹的 Pandas 问题?)

完整问题
我正在阅读 Pandas 数据框,并将其分发给工作人员。然后我在提交新任务时使用这个未来,并将其存储在一个变量中以便于访问。

示例代码:

df = pq.read_table('/data/%s.parq' % dataset).to_pandas()
df = client.scatter(df, broadcast=True, direct=True)
v = Variable('dataset')
v.set(df)

当我提交我使用的工作时:

def top_ten_x_based_on_y(dataset, column):
    return dataset.groupby(dataset['something'])[column].mean().sort_values(ascending=False)[0:10].to_dict()

a = client.submit(top_ten_x_based_on_y, df, 'a_column')

现在,我想在这个数据集上运行 10-20 QPS,所有工作人员都在内存中(数据

数据集大约为 2GB。

我知道这可能会有问题,因为 Pandas Dataframe 本身不是不可变的(尽管可以制作 Numpy 数组)。

其他想法

  1. 在每次查询时复制数据集,但即使在 RAM 中复制 2GB 也需要时间(大约 1.4 秒)

  2. 设计一种方法来散列一个数据帧(本身是有问题的,即使hash_pandas_object 现在存在),并检查数据帧之前和之后(或每分钟)是否与预期相同。运行 hash_pandas_object 大约需要 5 秒。

【问题讨论】:

  • 好问题!我也很欣赏tl;dr 部分:)

标签: python pandas dask dask-distributed


【解决方案1】:

不幸的是,Dask 目前没有在 Python 之上提供额外的功能来避免这种方式的突变。 Dask 只运行 Python 函数,而这些 Python 函数可以做任何他们喜欢的事情。

您在运行操作之前复制或检查的建议对我来说似乎是明智的。

您也可以考虑将此作为问题或功能请求向 Pandas 本身提出。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-01-12
  • 2021-03-17
  • 2021-01-02
  • 1970-01-01
  • 2019-07-16
  • 2017-06-30
  • 2021-05-10
相关资源
最近更新 更多