【发布时间】: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 数组)。
其他想法:
在每次查询时复制数据集,但即使在 RAM 中复制 2GB 也需要时间(大约 1.4 秒)
设计一种方法来散列一个数据帧(本身是有问题的,即使
hash_pandas_object现在存在),并检查数据帧之前和之后(或每分钟)是否与预期相同。运行 hash_pandas_object 大约需要 5 秒。
【问题讨论】:
-
好问题!我也很欣赏
tl;dr部分:)
标签: python pandas dask dask-distributed