我在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?
答案 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())