[英]Spark groupBy agg not working as expected
我收到類似的問題:
(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和email互換,它也具有相同的計數。
我更困惑地看到: https : //spark.apache.org/docs/1.5.2/api/scala/index.html#org.apache.spark.sql.DataFrame
Agg doc說:在整個DataFrame上聚合而不分組。 “沒有團體”? 這意味着什么?
有什么線索嗎? 還是吉拉票? 或現在可以解決什么問題?
讓我們從“無組”部分開始。 如文檔中所述:
df.agg(...)是df.groupBy()。agg(...)的簡寫
如果仍然不清楚,它將轉換為SQL:
SELECT SOME_AGGREGATE_FUNCTION(some_column) FROM table
關於第二個問題,如果不訪問數據很難給您一個好的答案,但是通常來說這兩個查詢並不相同。 第一個簡單地計算不同的email
值,第二個簡單地計算每個電子郵件的最后一個user_id
唯一值。 而且,沒有顯式排序的last
沒有意義。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.