作为我正在进行的数据集成过程的一部分,我需要将sparksqlDataframe持久化为一个外部配置单元表。
我目前的限制:
目前仅限于spark 1.6(v1.6.0)
需要将数据持久化到特定位置,即使删除了表定义(因此是外部表),也要保留数据
我找到了一个令人满意的解决方案来编写Dataframe, 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).
有没有更好/更安全/更标准的方法来持久化Dataframe?
1条答案
按热度按时间ckocjqey1#
我宁愿自己创建配置单元表(例如,如果不存在则创建外部表),然后在spark中只需执行以下操作:df.write.saveastable('schema.table\u name',mode='overwrite')。
这样您就可以控制表的创建,而不必依赖hivecontext来做您需要的事情。在过去,以这种方式创建的配置单元表存在一些问题,而且行为将来可能会发生变化,因为该api是通用的,无法保证hivecontext的底层实现。