重启spark后,使用sqlContext.createExternalTable创建的表不可见

时间:2015-11-01 18:06:36

标签: hadoop apache-spark apache-spark-sql

我正在使用以下语句创建hive外部表           sqlContext.createExternalTable(tableName, "parquet", someDF.schema, Map("path" -> path)) 重启spark后,创建的表不可见。 有可能以某种方式使用某些数据框架中的现有模式使用spark创建一个hachyon持久化的hive表吗? 我希望在hive Metastore中保留表模式。可能吗 ?

最诚挚的问候, 迈克尔

1 个答案:

答案 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的示例。