API-интерфейс dask говорит, что map_partition можно использовать для «применения функции Python для каждого раздела DataFrame». Из этого описания и в соответствии с обычным поведением «карты» я ожидаю, что возвращаемое значение map_partitions будет (что-то вроде) списком, длина которого равна числу разделов. Каждый элемент списка должен быть одним из возвращаемых значений вызовов функций.Что такое map_partitions?
Однако в отношении следующего кода, я не уверен, что возвращаемое значение зависит от:
#generate example dataframe
pdf = pd.DataFrame(np.random.randint(0,100,size=(100, 4)), columns=list('ABCD'))
ddf = dd.from_pandas(pdf, npartitions=3)
#define helper function for map. VAL is the return value
VAL = pd.Series({'A': 1})
#VAL = pd.DataFrame({'A': [1]}) #other return values used in this example
#VAL = None
#VAL = 1
def helper(x):
print('function called\n')
return VAL
#check result
out = ddf.map_partitions(helper).compute()
print(len(out))
VAL = pd.Series({'A': 1})
причины 4 вызова функции (вероятно, один, чтобы вывести DTYPE и 3 для разделов) и выход с len == 3 и тип pd.Series.pd.DataFrame({'A': [1]})
приводит к тому же числу, однако результирующим типом является pd.DataFrame.VAL = None
вызывает TypeError ... почему? Невозможно ли использовать map_partitions для do что-то, а не return что-то?VAL = 1
приводит только к 2 вызовам функций. Результатом map_partitions является целым числом 1.
Поэтому я хочу задать несколько вопросов:
- как возвращаемое значение map_partitions определяется?
- Что влияет на количество вызовов функций, помимо количества разделов/Какие критерии выполняет функция, которую нужно вызывать один раз с каждым разделом?
- Какое должно быть возвращаемое значение функции, которое только «что-то» делает, т. Е. Процедура?
- Как должна быть создана функция, которая возвращает произвольные объекты?
Спасибо, особенно за подсказку использования dask.delayed в описанной ситуации. Но почему я только получаю 2 вызова функций в случае VAL = 1? –
Могу ли я попросить вас [поднять вопрос] (https://github.com/dask/dask/issues/new) – MRocklin
https://github.com/dask/dask/issues/1518 –