PySpark:聚合分组数据的自定义函数

时间:2016-03-14 13:59:42

标签: python sql dataframe pyspark

我有一个包含

的PySpark DataFrame
Row(id='id1', type='A', status='H', keywords=['k1', 'k2', 'k3'])

状态是二进制选项('S'/'H')。 我需要做的是计算每个类型,id和状态每个关键字的状态 S 的出现率。 比率将是

s/(s+h)

这里出现 s h 。 因此,例如,如果关键字 k1 在S型中出现2次,在 A 中出现3次H,那么我希望在该类型中输入2/3,并且我的最终输出理想情况下是

Row(id='id1', type='A', keyword='k1', ratio=0.66)

我认为这必须通过几个步骤,我很乐意计算S和H中的出现次数,然后创建更多列来比较两者。

但是,在我通过'id','type'和'status'运行 groupBy 后,我将如何计算出现的事件?是否有办法使用自定义函数运行 agg

1 个答案:

答案 0 :(得分:6)

这样的事情可以解决问题:

from pyspark.sql.functions import explode, avg, col

ratio = avg(
    # If status "S" then 1.0 else 0.0
    (col("status") == "S").cast("double")
 ).alias("ratio")

(df
    .withColumn("keyword", explode("keywords"))
    .groupBy("id", "type", "keyword")
    .agg(ratio))