我使用了一种使用镶木地板文件格式将数据帧另存为外部表的方法,但是有没有其他方法可以将数据帧直接保存为hive中的外部表,就像我们为托管表保存AsTable
你可以这样做到这一点
df.write.format("ORC").options(Map("path"-> "yourpath")) saveAsTable "anubhav"
在 PySpark 中,可以按如下方式创建外部表:
df.write.option('path','<External Table Path>').saveAsTable('<Table Name>')
对于外部表,不要使用 saveAsTable
。而是将数据保存在 path
指定的外部表的位置。然后添加分区,以便向 hive 元数据注册它。这将允许你稍后按分区进行配置查询。
// hc is HiveContext, df is DataFrame.
df.write.mode(SaveMode.Overwrite).parquet(path)
val sql =
s"""
|alter table $targetTable
|add if not exists partition
|(year=$year,month=$month)
|location "$path"
""".stripMargin
hc.sql(sql)
您还可以使用手动创建表保存数据帧
dataframe.registerTempTable("temp_table");
hiveSqlContext.sql("create external table
table_name if not exist as select * from temp_table");
下面提到的链接对创建表 https://docs.databricks.com/spark/latest/spark-sql/language-manual/create-table.html 有一个很好的解释