Изменение формы массива dask (полученного из столбца dask dataframe) - PullRequest
0 голосов
/ 07 сентября 2018

Я новичок в dask и пытаюсь выяснить, как изменить форму массива dask, полученного из одного столбца кадра данных dask, и у меня возникают ошибки.Хотите знать, если кто-нибудь может знать об исправлении (без необходимости вычисления)?Спасибо!

Пример:

import pandas as pd
import numpy as np
from dask import dataframe as dd, array as da
df = pd.DataFrame({'x': [1, 2, 3], 'y': [4, 5, 6]})
ddf = dd.from_pandas(df, npartitions=2)

# This does not work - error ValueError: cannot convert float NaN to integer
ddf['x'].values.reshape([-1,1])

# this works, but requires a compute
ddf['x'].values.compute().reshape([-1,1])

# this works, if the dask array is created directly from a np array
ar = np.array([1, 2, 3])
dar = da.from_array(ar, chunks=2)
dar.reshape([-1,1])

Ответы [ 2 ]

0 голосов
/ 30 июля 2019

Также:

ddf['x'].to_dask_array(lengths=True).reshape([-1,1])
0 голосов
/ 08 сентября 2018

К сожалению, тогда длина кадра данных и его частей в Dask обычно ленива и вычисляется только по явному запросу.Это означает, что массив также не знает своей длины или разбиения, и поэтому вы не можете изменить его форму.Следующий неуклюжий код обходит это, но я чувствую, что должен быть более простой способ:

Найти куски:

chunks = tuple(ddf['x'].map_partitions(len).compute())
size = sum(chunks)

Создать новый объект массива с уже известными кусками и размером:

a = ddf['x'].values
arr = da.Array(a.dask, a.name, chunks, a.dtype, (size,))
...