2

如何将'groupby(key).agg('与用户定义的函数一起使用?具体来说,我需要每个键的所有唯一值列表[不计数]。

4

2 回答 2

2

和(分别用于无序collect_setcollect_list有序结果)可用于对 groupby 结果进行后处理。从一个简单的 spark 数据框开始

    df = sqlContext.createDataFrame(
    [('first-neuron', 1, [0.0, 1.0, 2.0]), 
    ('first-neuron', 2, [1.0, 2.0, 3.0, 4.0])], 
    ("neuron_id", "time", "V"))

假设目标是返回每个神经元的最长 V 列表长度(按名称分组)

    from pyspark.sql import functions as F
    grouped_df = tile_img_df.groupby('neuron_id').agg(F.collect_list('V'))

我们现在已将 V 列表分组为列表列表。因为我们想要最长的长度,所以我们可以跑

    import pyspark.sql.types as sq_types
    len_udf = F.udf(lambda v_list: int(np.max([len(v) in v_list])),
                      returnType = sq_types.IntegerType())
    max_len_df = grouped_df.withColumn('max_len',len_udf('collect_list(V)'))

使用 V 列表的最大长度添加 max_len 列

于 2017-05-08T20:28:58.977 回答
1

我找到pyspark.sql.functions.collect_set(col)了我想要的工作。

于 2016-05-20T11:33:28.510 回答