作为我正在处理的数据集成过程的一部分,我需要将Spark SQL DataFrame持久化为外部Hive表。
我目前的约束:
我发现编写数据帧df
似乎是一个令人满意的解决方案,如下所示:
df.write.saveAsTable('schema.table_name',
format='parquet',
mode='overwrite',
path='/path/to/external/table/files/')
对结果表执行describe extended schema.table_name
确认它确实是外部的。我还可以确认即使表本身被删除,数据也会保留(根据需要)。
我主要担心的是,我无法在任何地方找到一个记录在案的例子,我也不能在官方文档中找到它的很多内容 -
特别是使用path
来强制创建外部表。
(https://spark.apache.org/docs/1.6.0/api/python/pyspark.sql.html#pyspark.sql.DataFrameWriter)。
是否有更好/更安全/更标准的方法来保留数据帧?
答案 0 :(得分:0)
我更喜欢自己创建Hive表(例如,创建外部表,如果不是EXISTS),然后在Spark中执行:df.write.saveAsTable('schema.table_name',mode ='overwrite')。
通过这种方式,您可以控制表创建,而不依赖于HiveContext执行您需要的操作。在过去,Hive表的问题以这种方式创建,并且行为可能在将来发生变化,因为该API是通用的,并且不能保证HiveContext的底层实现。