Spark groupBy agg没有按预期工作

时间:2015-12-10 10:23:19

标签: scala apache-spark dataframe aggregate-functions

我遇到了类似的问题:

(df
    .groupBy("email")
    .agg(last("user_id") as "user_id")
    .select("user_id").count,
df
    .groupBy("email")
    .agg(last("user_id") as "user_id")
    .select("user_id")
    .distinct
    .count)

在一台计算机上运行时,它会给出:(15123144,15123144)

在群集上运行时,它会给出:(15123144,24)

第一个是预期的,看起来是正确的,但第二个是可怕的错误。还有一个观察 - 即使我更改了总计数多于/少于15123144的数据,我在群集上得到了明显= 24。 即使我交换user_id和电子邮件,它也会给出相同的不同计数。

通过看到https://spark.apache.org/docs/1.5.2/api/scala/index.html#org.apache.spark.sql.DataFrame

,我更加困惑

Agg doc说:在没有组的情况下聚合整个DataFrame。 “没有团体”?这是什么意思?

有任何线索吗?还是Jira票?或者现在可以修复什么?

1 个答案:

答案 0 :(得分:1)

让我们从&#34开始;没有小组"部分。正如文档中所描述的那样:

  

df.agg(...)是df.groupBy()的缩写.agg(...)

如果仍然不清楚,则转换为SQL:

SELECT SOME_AGGREGATE_FUNCTION(some_column) FROM table

关于你的第二个问题,如果没有数据访问权限很难给你一个好的答案,但一般来说这两个问题并不相同。第一个只计算不同的email值,第二个计算每个电子邮件的最后user_id个唯一值。而且没有明确排序的last是没有意义的。