Spark中便捷生成全域性唯一自增ID

2021-10-03 18:49:17 字數 1217 閱讀 9941

利用spark rdd api所提供的的zipwithindex() 和 zipwithuniqueid()生成id,兩者的區別如下。

zipwithindex()首先基於分割槽索引排序,然後是每個分割槽中的項的排序。所以第乙個分割槽中的第一項得到索引0,第二個分割槽的起始值是第乙個分割槽的最大值。從0開始。分區內id連續。會觸發spark job。

zipwithuniqueid()

每個分割槽是乙個等差數列,等差為分割槽數n,每個分割槽的第乙個值為分割槽id(id從0開始)。第k個分割槽:num*n+k。分區內id不連續。從0開始。不會觸發spark job。

import org.apache.spark.sparkexception

import org.apache.spark.rdd.rdd

import org.apache.spark.sql.catalyst.expressions.genericrowwithschema

import org.apache.spark.sql.types.longtype

import org.apache.spark.sql.

object sparkcommon )

sparksession.createdataframe(result, newschema)

}}

資料

本地測試

import org.junit.

import org.apache.spark.sql.

class sparkcommontest

}

測試結果

如果需要多次執行程式並保證id始終自增,可以在redis中維護偏移量,在呼叫adduniqueidcolumn時傳入對應的offset即可。

生成全域性唯一ID

a庫 b庫 c庫支援同時寫入 a庫初始值為1,自增為3,獲取的值一次是1 4 7 b庫初始值為2,自增為3,獲取的值一次是2 5 8 c庫初始值為3,自增為3,獲取的值一次是6 6 9 獲取id時可從三庫輪詢獲取 此方法使用資料庫原有的功能,所以相對簡單 能夠保證唯一性 能夠保證遞增性 id 之間的...

C 生成全域性唯一Guid

在軟體開發中,我們經常需要乙個唯一標識來標識乙個物件,在 php中,可以用uuid來獲得全域性唯一的id,其實c 也內建了簡單的guid獲得辦法,猜想guid應該是本機的特徵以及執行的時間的乙個雜湊值,所以幾乎可以保證不會重複,如下 guid include include 生成guid const...

C 生成全域性唯一Guid

在軟體開發中,我們經常需要乙個唯一標識來標識乙個物件,在php中,可以用uuid來獲得全域性唯一的id,其實c 也內建了簡單的guid獲得辦法,猜想guid應該是本機的特徵以及執行的時間的乙個雜湊值,所以幾乎可以保證不會重複,如下 include include 生成guid const char ...