這個需求好多時候是建立在想橫向合併兩個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...