簡體   English   中英

Spark組由agg無法正常工作

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM