我的本地存在一个示例数据集,我正在尝试在群集上执行一些基本的操作。
import dask.dataframe as ddf
from dask.distributed import Client
client = Client('Ip address of the scheduler')
import dask.dataframe as ddf
csvdata = ddf.read_csv('Path to the CSV file')
客户端连接到调度程序,调度程序又连接到两个工作程序(在其他计算机上)。
我的问题可能非常简单。
此csv文件是否应出现在其他工作节点上?
我好像找不到文件错误。
使用,
futures=client.scatter(csvdata)
x = ddf.from_delayed([future], meta=df)
#Price is a column in the data
df.Price.sum().compute(get=client.get) #returns" dd.Scalar<series-..., dtype=float64>" How do I access it?
client.submit(sum, x.Price) #returns "distributed.utils - ERROR - 6dc5a9f58c30954f77913aa43c792cc8"
另外,我确实提到了这个 Loading local file from client onto dask distributed cluster和http://distributed.readthedocs.io/en/latest/manage-computation.html
我认为我在这里混淆了很多东西而且我的理解混乱了。 任何帮助都会非常感激。
答案 0 :(得分:1)
是的,这里dask.dataframe假设您的工作人员也可以访问您在客户端代码中引用的文件。如果不是这种情况,那么您将在本地计算机中明确地读取数据,并将其分散给您的工作人员。
看起来你正在尝试做到这一点,除了你散布数据帧而不是pandas数据帧。在散布之前,您实际上必须从磁盘中具体加载pandas数据。如果您的数据适合内存,那么您应该能够完成您现在正在做的事情,但用pd.read_csv替换dd.read_csv调用
csvdata = pandas.read_csv('Path to the CSV file')
[future] = client.scatter([csvdata])
x = ddf.from_delayed([future], meta=df).repartition(npartitions=10).persist()
#Price is a column in the data
df.Price.sum().compute(get=client.get) # Should return an integer
如果您的数据太大,那么您可以考虑在本地使用dask来逐个读取数据并将数据分散到您的群集中。
import dask.dataframe as dd
ddf = dd.read_csv('filename')
futures = ddf.map_partitions(lambda part: c.scatter([part])[0]).compute(get=dask.get) # single threaded local scheduler
ddf = dd.from_delayed(list(futures), meta=ddf.meta)