我正在使用以下语句创建hive外部表
sqlContext.createExternalTable(tableName, "parquet", someDF.schema, Map("path" -> path))
重启spark后,创建的表不可见。
有可能以某种方式使用某些数据框架中的现有模式使用spark创建一个hachyon持久化的hive表吗?
我希望在hive Metastore中保留表模式。可能吗 ?
最诚挚的问候, 迈克尔
答案 0 :(得分:1)
使用HiveContext而不是SQLContext。从SparkSQL和DataFrame指南:
使用HiveContext时,也可以使用
saveAsTable
命令将DataFrames保存为持久表。与registerTempTable命令不同,saveAsTable
将实现数据帧的内容并创建指向HiveMetastore中数据的指针。只要您保持与同一Metastore的连接,即使您的Spark程序重新启动后,持久表仍然存在。可以通过使用表的名称在SQLContext上调用table方法来创建持久表的DataFrame。默认情况下,
saveAsTable
将创建一个“托管表”,这意味着数据的位置将由Metastore控制。当删除表时,托管表也会自动删除它们的数据。
由于HiveContext继承自SQLContext,因此您无法从该方面失去任何功能,并且您可以在Hive Metastore中查找表以及在HiveQL中编写查询。您可以找到有关使用HiveContext here的更多信息,并查找其使用here的示例。