for elem in list:
final = sqlCtx.read.table('XXX.YYY')
interim = final.join(elem,'user_id', "fullouter")
final = interim.select(['user_id'] + [
spark_combine_first(final[c], elem[c]).alias(c) for c in dup_collect(interim.columns)[0] if c not in ['user_id']] + \
[c for c in dup_collect(interim.columns)[1] if c not in ['user_id']])
final.write.mode("overwrite").saveAsTable("XXX.temp_test")
final2 = sqlCtx.read.table('XXX.temp_test')
final2.write.mode("overwrite").saveAsTable("XXX.YYY")
这是我的模拟代码,如您所见,我正在从一个表中读取数据,然后最终写入 Hadoop 服务器上的同一个表,但是我收到一个错误,即从同一个表读取时无法覆盖该表。
我找到了一个临时解决方法(通过写入一个临时表,然后将其导入一个新的 DataFrame,最后写入所需的表)但是,这似乎非常低效。
我希望有另一种方法,我可以简单地重命名从 spark API 中创建的 temp_table,但没有取得多大成功。
PS:请忽略缩进,我似乎无法在这里获得正确的格式。