我遇到了类似的问题:
(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票?或者现在可以修复什么?
答案 0 :(得分:1)
让我们从&#34开始;没有小组"部分。正如文档中所描述的那样:
df.agg(...)是df.groupBy()的缩写.agg(...)
如果仍然不清楚,则转换为SQL:
SELECT SOME_AGGREGATE_FUNCTION(some_column) FROM table
关于你的第二个问题,如果没有数据访问权限很难给你一个好的答案,但一般来说这两个问题并不相同。第一个只计算不同的email
值,第二个计算每个电子邮件的最后user_id
个唯一值。而且没有明确排序的last
是没有意义的。