利用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 ...