Apache spark 插入时增量表中的自动增量id
我在使用pysparkSQL和delta表合并csv文件时遇到问题。我设法创建了upsert函数,匹配时更新,不匹配时插入 我想将列Apache spark 插入时增量表中的自动增量id,apache-spark,pyspark,apache-spark-sql,delta-lake,Apache Spark,Pyspark,Apache Spark Sql,Delta Lake,我在使用pysparkSQL和delta表合并csv文件时遇到问题。我设法创建了upsert函数,匹配时更新,不匹配时插入 我想将列ID添加到最终的增量表中,并在每次插入数据时增加它。此列标识增量表中的每一行。有什么办法可以做到这一点吗 def Merge(dict1, dict2): res = {**dict1, **dict2} return res def create_default_values_dict(correspondance_df,marketplace)
ID
添加到最终的增量表中,并在每次插入数据时增加它。此列标识增量表中的每一行。有什么办法可以做到这一点吗
def Merge(dict1, dict2):
res = {**dict1, **dict2}
return res
def create_default_values_dict(correspondance_df,marketplace):
dict_output = {}
for field in get_nan_keys_values(get_mapping_dict(correspondance_df, marketplace)):
dict_output[field] = 'null'
# We want to increment the id row each time we perform an insertion (TODO TODO TODO)
# if field == 'id':
# dict_output['id'] = col('id')+1
# else:
return dict_output
def create_matched_update_dict(mapping, products_table, updates_table):
output = {}
for k,v in mapping.items():
if k == 'source_name':
output['products.source_name'] = lit(v)
else:
output[products_table + '.' + k] = F.when(col(updates_table + '.' + v).isNull(), col(products_table + '.' + k)).when(col(updates_table + '.' + v).isNotNull(), col(updates_table + '.' + v))
return output
insert_dict = create_not_matched_insert_dict(mapping, 'products', 'updates')
default_dict = create_default_values_dict(correspondance_df_products, 'Cdiscount')
insert_values = Merge(insert_dict, default_dict)
update_values = create_matched_update_dict(mapping, 'products', 'updates')
delta_table_products.alias('products').merge(
updates_df_table.limit(20).alias('updates'),
"products.barcode_ean == updates.ean") \
.whenMatchedUpdate(set = update_values) \
.whenNotMatchedInsert(values = insert_values)\
.execute()
我试图在函数
create\u default\u values\u dict
中增加列id
,但它似乎不起作用,不能自动增加1。还有别的办法解决这个问题吗?提前感谢:)增量不支持自动增量列类型
一般来说,Spark不使用自动递增ID,而是支持单调递增ID。请参见函数。单调递增的\u id()
如果要实现自动增量行为,必须使用多个增量操作,例如,查询最大值+将其添加到通过窗口函数计算的行数()
列中+然后写入。这是有问题的,原因有二:
row\u number()
将并行性降低到1,强制所有数据通过单个核心,这对于大数据来说非常缓慢希望这有帮助。增量不支持自动增量列类型 一般来说,Spark不使用自动递增ID,而是支持单调递增ID。请参见
函数。单调递增的\u id()
如果要实现自动增量行为,必须使用多个增量操作,例如,查询最大值+将其添加到通过窗口函数计算的行数()
列中+然后写入。这是有问题的,原因有二:
row\u number()
将并行性降低到1,强制所有数据通过单个核心,这对于大数据来说非常缓慢