我使用了一种方法来使用parquet文件格式将dataframe保存为外部表,但是是否有其他方法可以像saveastable for managed table那样直接将dataframe保存为配置单元中的外部表
tct7dpnv1#
你可以这样做df.write.format(“orc”).options(map(“path”->“yourpath”))saveastable“anubhav”
mec1mxoz2#
在pyspark中,可以如下创建外部表:
df.write.option('path','<External Table Path>').saveAsTable('<Table Name>')
hpcdzsge3#
对于外部表,不要使用 saveAsTable . 而是将数据保存在 path . 然后添加分区,以便用配置单元元数据注册它。这将允许您稍后按分区进行配置单元查询。 // 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)
saveAsTable
path
// 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)
lztngnrs4#
您还可以使用手动创建表来保存Dataframe
dataframe.registerTempTable("temp_table"); hiveSqlContext.sql("create external table table_name if not exist as select * from temp_table");
下面提到的链接对createtable有很好的解释https://docs.databricks.com/spark/latest/spark-sql/language-manual/create-table.html
4条答案
按热度按时间tct7dpnv1#
你可以这样做
df.write.format(“orc”).options(map(“path”->“yourpath”))saveastable“anubhav”
mec1mxoz2#
在pyspark中,可以如下创建外部表:
hpcdzsge3#
对于外部表,不要使用
saveAsTable
. 而是将数据保存在path
. 然后添加分区,以便用配置单元元数据注册它。这将允许您稍后按分区进行配置单元查询。// 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)
lztngnrs4#
您还可以使用手动创建表来保存Dataframe
下面提到的链接对createtable有很好的解释https://docs.databricks.com/spark/latest/spark-sql/language-manual/create-table.html