Dask Distributed中只读Pandas数据集

时间:2018-04-25 08:27:32

标签: python pandas dask dask-distributed

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

完整问题
我正在阅读Pandas Dataframe,并将其分散给工人。然后,当我提交新任务时,我将使用此未来,并将其存储在变量中以便于访问。

示例代码:

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,所有工作人员都在内存中(数据< RAM),但我希望防止数据集的意外更改,例如一名工人"腐败&# 34;它自己的记忆会导致不一致。最好在尝试修改时引发异常。

数据集大约为2GB。

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

其他想法

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

  2. 设计一种散列数据帧的方法(探测本身,即使现在存在hash_pandas_object),如果数据帧与预期相同,则检查前后(或每分钟)。运行hash_pandas_object大约需要5秒钟。

1 个答案:

答案 0 :(得分:0)

不幸的是,Dask目前不提供Python之外的其他功能,以避免以这种方式发生突变。 Dask只运行Python函数,那些Python函数可以做任何他们喜欢的事情。

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

您也可以考虑将其作为对熊猫本身的问题或功能请求。