如何在spark.dataframe中编码分组数据?

时间:2019-08-07 09:05:10

标签: pyspark apache-spark-sql

我在spark.dataframe A中有类似的数据:

Ben       1
Ben       2
Ben       4
Ben       3
Jerry     2
Jerry     2
Jane      3
Jane      5
James     1
James     1

我们的Action_id范围是1-5。 我们想要这样获得spark.dataframe B:

Name     Action_id=1    Action_id=2   Action_id=3  Action_id=4  Action_id=5
Ben          1              1            1               1            0
Jane         0              0            1               0            1
Jerry        0              2            0               0            0            
James        2              0            0               0            0

例如,(Ben,Action_id = 1)中的“ 1”表示在上一个数据帧中,Ben一次执行动作1。

如何将数据帧A转换为数据帧B?

1 个答案:

答案 0 :(得分:0)

您正在使用PivotTable聚合来寻找Count

在Scala中:

import org.apache.spark.sql.{functions => F}

val df = Seq(("Ben", 1),
("Ben", 2),
("Ben", 4),
("Ben", 3),
("Jerry", 2),
("Jerry", 2),
("Jane", 3),
("Jane", 5),
("James", 1),
("James", 1)).toDF("Name", "Action_id")

df.groupBy("Name").pivot("Action_id").agg(F.count("Action_id")).na.fill(0).show

我现在无法访问pyspark shell,但这应该是这样的:

import pyspark.sql.functions as F

(df
    .groupby(df.Name)
    .pivot("Action_id")
    .agg(F.count("Action_id"))
    .na.fill(0)
    .show())