【问题标题】:Difference between these two count methods in SparkSpark中这两种计数方法的区别
【发布时间】:2018-06-07 06:22:30
【问题描述】:

我一直在使用 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。显然这两种计数方法不相等或发生了其他事情,但我试图弄清楚:原因是什么这些有什么区别?

【问题讨论】:

  • 两个查询应该给出相同的结果。您能否发布示例数据,以便我们可以复制错误并进行测试?

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


【解决方案1】:

我猜是因为在第一个查询中,您仅按 2 列分组,而在第二个 4 列中分组。因此,您可能只在两列上的不同组较少。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-08
    • 2019-03-31
    • 2011-12-10
    • 2016-07-01
    • 2015-09-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多