【发布时间】:2016-10-16 21:24:13
【问题描述】:
我有用户游戏会话,其中包含:用户 ID、游戏 ID、分数和玩游戏时的时间戳。
from pyspark import SparkContext
from pyspark.sql import HiveContext
from pyspark.sql import functions as F
sc = SparkContext("local")
sqlContext = HiveContext(sc)
df = sqlContext.createDataFrame([
("u1", "g1", 10, 0),
("u1", "g3", 2, 2),
("u1", "g3", 5, 3),
("u1", "g4", 5, 4),
("u2", "g2", 1, 1),
], ["UserID", "GameID", "Score", "Time"])
期望的输出
+------+-------------+-------------+
|UserID|MaxScoreGame1|MaxScoreGame2|
+------+-------------+-------------+
| u1| 10| 5|
| u2| 1| null|
+------+-------------+-------------+
我想转换数据,以便我获得用户玩的第一场比赛的最高分以及第二场比赛的最高分(如果我还可以获得所有后续比赛的最高分,则奖励)。不幸的是,我不确定如何使用 Spark SQL。
我知道我可以按 UserID、GameID 和 agg 分组以获得最高分数和最短时间。不知道如何从那里继续。
澄清:注意MaxScoreGame1和MaxScoreGame2指的是第一个和第二个游戏用户玩家;不是 GameID。
【问题讨论】:
标签: apache-spark pyspark apache-spark-sql pyspark-sql