Apache spark 使用spark sql DataFrameWriter创建外部配置单元表

Apache spark 使用spark sql DataFrameWriter创建外部配置单元表,apache-spark,hive,spark-dataframe,pyspark-sql,Apache Spark,Hive,Spark Dataframe,Pyspark Sql,作为我正在进行的数据集成过程的一部分,我需要将Spark SQL数据帧持久化为外部配置单元表 我目前的限制: 目前仅限于Spark 1.6(v1.6.0) 需要将数据持久化到特定位置,即使删除了表定义也会保留数据(因此是外部表) 我已经找到了一个令人满意的解决方案来编写数据帧,df,如下所示: df.write.saveAsTable('schema.table_name', format='parquet', mode='overwrite', path='/pat

作为我正在进行的数据集成过程的一部分,我需要将Spark SQL数据帧持久化为外部配置单元表

我目前的限制:

  • 目前仅限于Spark 1.6(v1.6.0)
  • 需要将数据持久化到特定位置,即使删除了表定义也会保留数据(因此是外部表)
我已经找到了一个令人满意的解决方案来编写数据帧,
df
,如下所示:

df.write.saveAsTable('schema.table_name',
    format='parquet',
    mode='overwrite',
    path='/path/to/external/table/files/')       
对生成的表执行
描述扩展模式。表\u name
确认它确实是外部的。我还可以确认,即使删除了表本身,数据也会保留(根据需要)

我主要担心的是,我在任何地方都找不到这方面的文档化例子,在官方文件中也找不到太多关于这方面的提及- 特别是使用
路径
强制创建外部表。 ().


是否有更好/更安全/更标准的方法来持久化数据帧

我宁愿自己创建配置单元表(例如,如果不存在外部表,则创建外部表),然后在Spark中执行以下操作:df.write.saveAsTable('schema.TABLE_name',mode='overwrite')


这样,您就可以控制表的创建,而不必依赖HiveContext来完成所需的工作。过去,以这种方式创建的配置单元表存在一些问题,将来行为可能会改变,因为该API是通用的,无法保证HiveContext的底层实现。

感谢您的回答Gonzalo。明确地说,您是否建议我使用配置单元create语句在所需位置专门创建表,然后将架构创建留给
saveAsTable
命令?或者在配置单元语句中包含尽可能多的表定义?我总是在CREATE中进行完整的表定义,如果表已经存在,我希望(但没有尝试)忽略save参数