Spark中这两种计数方法的区别

时间:2018-06-06 20:57:30

标签: scala apache-spark apache-spark-sql

我一直在做#34;游戏"使用spark-sql。第一种方式是这样的:

val gamesByVersion = dataframe.groupBy("game_version", "server").count().withColumnRenamed("count", "patch_games")

val games_count1 = gamesByVersion.where($"game_version" === 1 && $"server" === 1)

第二个是这样的:

val gamesDf = dataframe.
  groupBy($"hero_id", $"position", $"game_version", $"server").count().
  withColumnRenamed("count", "hero_games")

val games_count2 = gamesDf.where($"game_version" === 1 && $"server" === 1).agg(sum("hero_games"))

对于所有意图和目的,dataframe只有hero_idpositiongame_versionserver列。

然而games_count1最终约为10,而games_count2最终为50.这显然这两种计数方法不等同或正在发生其他事情,但我想弄清楚:什么是这些差异的原因?

1 个答案:

答案 0 :(得分:1)

我猜是因为在第一个查询中,您只分组了2列,而在后4列中。因此,您可能只有两列不同的组。