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 и, наконец, записав в требуемую таблицу), но это выглядит как супер неэффективный.
Я надеялся на другой подход, с помощью которого я мог бы просто переименовать temp_table, созданный из API-интерфейса spark, но не добился большого успеха.
PS: Пожалуйста, игнорируйте отступ, я не могу показатьсячтобы получить правильное форматирование здесь.