我正在开发一种解决方案,该解决方案使用以下代码通过给定索引更新 delta 湖:
dataframe = ks.read_table('data')
subdataframe = dataframe .loc[dataframe ['status']== 1,:]
for index,column in subdataframe.iterrows():
#get values for a given row
record= subdataframe.loc[index].to_dict()
if(record_needs_updating):
#update deltalake
dataframe.loc[dataframe['file']==record['file'],'status'] = 0
dataframe.to_delta('fileloc', partition_cols='pull',mode='overwrite')
#update databricks table
spark.sql("DROP TABLE IF EXISTS data")
spark.sql("CREATE TABLE data USING DELTA LOCATION fileloc)
spark.sql("OPTIMIZE data")
我遇到的问题是在 for 循环中尝试索引子数据帧时出现的关键错误。
这似乎是因为数据帧本身在更新 delta 湖后更新为不包含状态 = 0 的任何记录,这意味着索引发生了变化,从而产生了关键错误。
有什么办法可以将子数据帧变成一个不会随着 deltalake 更新而更新的非实时数据帧?
还要注意,我需要在代码运行时进行更新,而不是在所有代码运行后才更新一次。
谢谢!