pyspark裡加自增ID

2021-10-04 09:24:26 字數 1612 閱讀 1793

這個需求好多時候是建立在想橫向合併兩個pyspark_dataframe,但是pyspark_dataframe與pandas_dataframe有所不同,無法用concat這類函式硬拼接,pyspark裡的monotonically_increasing_id函式到一定長度之後兩個df自增的中間會隔斷,突然從乙個比較大的數開始,合併之後就是空或缺行的dataframe,如下圖:

解決方式如下:

from commons import sparksession

from pyspark.sql.functions import monotonically_increasing_id

from pyspark.sql.types import structfield, longtype

if __name__ ==

'__main__'

:def

add_id

(df)

: schema = df.schema.add(structfield(

"id"

, longtype())

) rdd = df.rdd.zipwithindex(

)def

flat

(l):

for k in l:

ifnot

isinstance

(k,(

list

,tuple))

:yield k

else

:yield

from flat(k)

rdd = rdd.

map(

lambda x:

list

(flat(x)))

res = sparksession.createdataframe(rdd, schema)

return res

df1 = sparksession.createdataframe([(

'abcd'

,'123'),

('abd'

,'13'),

('abc'

,'12')]

,['s',

'd']

)# df1=df1.withcolumn("id", monotonically_increasing_id())

df1.show(

) df2 = sparksession.createdataframe([(

'mnb'

,'456'),

('mgb'

,'56'),

('ngb'

,'45')]

,['r',

't']

) df1 = add_id(df1)

df1.show(

) df2 = add_id(df2)

df2.show(

) join_df = df1.join(df2, df1.

id== df2.id)

join_df.show(

)

mysql 實現id自增序列 mysql自增id列

如果希望在每次插入新記錄時,自動地建立主鍵欄位的值。可以在表中建立乙個 auto increment 字段。mysql 使用 auto increment 關鍵字來執行 auto increment 任務。預設地auto increment 的開始值是 1,每條新記錄遞增 1。主鍵又稱主關鍵字,主關...

Oracle自增ID實現

首先,建立一張表 create table example id number 4 not null primary key,name varchar 25 然後,自定義乙個序列 sequence create sequence example sequence increment by 1 每次加...

認識自增ID欄位

int最大值是21億,每天100萬個事務,也夠用58年。而且,你不可能存這麼多條資料,而且是不斷刪除的。如果你還擔心,可以用序列sequence,bigint的,可以用到宇宙 下面的語句建立了自增長欄位的表,自增長字段採用了bigint,足夠大 create table test id id col...