我试图写一个DataFrame进入Hive表(上S3中)Overwrite模式(需要我的应用程序),并需要DataFrameWriter(火花/斯卡拉)的两种方法之间做出选择.从我可以中读取文档,df.write.saveAsTable不同于df.write.insertInto在以下几个方面:
saveAsTable在使用基于位置的分辨率时insertInto使用基于列名称的分辨率saveAsTable更多关注现有表的底层模式以进行某些分辨率总体而言,它给我的印象是,saveAsTable仅仅是一个更聪明的版本的insertInto.或者,根据用例,人们可能更喜欢insertInto
但是这些方法中的每一种都有自己的一些注意事项,例如性能损失saveAsTable(因为它包含更多功能)?除了在文档中讲述(不是非常清楚)的内容之外,他们的行为还有其他差异吗?
编辑-1
文档说明了这一点 insertInto
将DataFrame的内容插入到指定的表中
这个 saveAsTable
在表已存在的情况下,此函数的行为取决于模式函数指定的保存模式
现在我可以列出我的怀疑
insertInto总是期望表存在吗?SaveMode■找什么影响insertInto?saveAsTable与SaveMode.Append和insertInto给该表已经存在?insertInto与SaveMode.Overwrite任何意义?