使用spark sql DataFrameWriter创建外部Hive表

时间:2017-09-01 13:17:22

标签: apache-spark hive spark-dataframe pyspark-sql

作为我正在处理的数据集成过程的一部分,我需要将Spark SQL DataFrame持久化为外部Hive表。

我目前的约束:

  • 目前仅限于Spark 1.6(v1.6.0)
  • 需要将数据保留在特定位置,即使删除了表定义(因此外部表),也要保留数据

我发现编写数据帧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)。

是否有更好/更安全/更标准的方法来保留数据帧?

1 个答案:

答案 0 :(得分:0)

我更喜欢自己创建Hive表(例如,创建外部表,如果不是EXISTS),然后在Spark中执行:df.write.saveAsTable('schema.table_name',mode ='overwrite')。

通过这种方式,您可以控制表创建,而不依赖于HiveContext执行您需要的操作。在过去,Hive表的问题以这种方式创建,并且行为可能在将来发生变化,因为该API是通用的,并且不能保证HiveContext的底层实现。