数据框上的 Dask 方法到 return 应用方法结果的字典

Dask method on dataframe to return a dictionary of applied method results

我有一个创建值列表的函数。当从数据框中给定一行时,这是此类函数可能执行的操作的简化版本。

def generate_key_list_pair(row):
    some_list = do_something_to_make_a_list(row)
    return some_list

然后我想将该方法应用于 Dask 数据帧和 return 字典中的所有行,这样:

ddf.apply(generate_key_list_pair)

...会 return 一个字典,其键是行 ID,其值是每个行应用函数的结果,例如:

{
    1: [3.0, 4.12, 5.2, 23.1, 4.9],
    ...
    n: [9.34, 8.12, 3.42, 12.1, 34.2]
}

其中 1n 将是传递给每个 generate_key_list_pair 函数调用的行 Series 对象的 id 列值。

编辑:1...n 可能是存在于原始数据框中的列中的唯一标识符。

apply 这样的 Dask-Dataframe 方法通常会给你更多的数据帧,这不是你在这种情况下所追求的。但是,您可以访问组成 pandas 数据帧并仍然保持 scheduler/parallel 操作:

def dict_from_part(df):
    d2 = df.set_index('id_column').apply(do_something_to_make_a_list, axis=1)
    # d2 is a series, so long as the number of elements of the lists
    # isn't accidentally the same as the number of columns
    return d2.to_dict()

parts = [delayed(dict_from_part)(df) for df in ddf.to_delayed()]

现在 parts 是一个 delayed 对象的列表,每个对象都可以 compute-d 到你想要的字典。如果你想组合这些字典,你需要创建元组(例如,items())并对它们求和。