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,最后写入所需的表),但是,这看起来效率非常低。
我希望有另一种方法可以简单地重命名sparkapi中创建的temp\ u表,但没有找到太多成功的方法。
ps:请忽略缩进,我似乎无法得到正确的格式在这里。
暂无答案!
目前还没有任何答案,快来回答吧!