簡體   English   中英

PySpark `monotonically_increasing_id()` 為每一行返回 0

[英]PySpark `monotonically_increasing_id()` returns 0 for each row

這段代碼

def foobar(df):
    return (
        df.withColumn("id", monotonically_increasing_id())
        .withColumn("foo", lit("bar"))
        .withColumn("bar", lit("foo"))
    )

somedf = foobar(somedf)
somedf.show() # <-- each `id` has value 0

創建並打印一個數據框,其中每個 id 的值為 0。

我真的很困惑,因為這是文檔中的monotonically_increasing_id方法描述:

生成的 ID 保證是單調遞增且唯一的,但不是連續的。 當前的實現將分區 ID 放在高 31 位,將每個分區內的記錄號放在低 33 位。 假設數據框少於 10 億個分區,每個分區少於 80 億條記錄。

它清楚地表明每一行都有一個唯一的值,並且還指出每個 id 在每個分區中都是唯一的,這意味着在分布式環境中使用此方法是安全的,因為每一行在所有分區中都有一個唯一的 id節點。

高31位是分區ID,低33位是每個分區內的記錄號

更令人困惑的是,在單個實例環境(在我的本地機器上)上面的代碼可以完美運行(每一行都有唯一的 ID)但是當我將相同的代碼部署到 AWS 並在 EMR 上運行時,我在 ID 下只得到 0

萬一有人也montonically_increasing_id返回 0 的問題(問題比我預期的要愚蠢得多)

確保您沒有轉換為int32 ,因為montonically_increasing_id返回int64並且似乎溢出被轉換為 0s

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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