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数组)。
其他想法:
复制每个查询的数据集,但2GB拷贝需要时间,即使在RAM中(大约1.4秒)
设计一种散列数据帧的方法(探测本身,即使现在存在hash_pandas_object
),如果数据帧与预期相同,则检查前后(或每分钟)。运行hash_pandas_object大约需要5秒钟。
答案 0 :(得分:0)
不幸的是,Dask目前不提供Python之外的其他功能,以避免以这种方式发生突变。 Dask只运行Python函数,那些Python函数可以做任何他们喜欢的事情。
您在运行操作之前复制或检查的建议对我来说是明智的。
您也可以考虑将其作为对熊猫本身的问题或功能请求。