将pyspark数据帧插入现有分区的配置单元表

时间:2017-09-15 18:42:51

标签: hive pyspark

我有一个hive表,它按列插入时间分区。

我有一个pyspark数据框,除了分区列外,它与表的列相同。

当表未分区时,以下情况很有效:

df.insertInto('tablename',overwrite=True)

但我无法弄清楚如何从pyspark

插入特定分区

尝试如下:

 df.insertInto('tablename',overwrite=True,partition(inserttime='20170818-0831'))

但它无法正常工作,

失败
SyntaxError: non-keyword arg after keyword arg

我正在使用pyspark 1.6

2 个答案:

答案 0 :(得分:1)

一个选项是:

df.registerTempTable('tab_name')
hiveContext.sql("insert overwrite table target_tab partition(insert_time=value) select * from tab_name ")

另一种选择是将此静态值添加为数据帧的最后一列,并尝试使用insertInto()作为动态分区模式。

答案 1 :(得分:1)

你可以使用df.write.mode(“overwrite”)。partitionBy(“inserttime”)。saveAsTable(“TableName”)

或者您可以覆盖分区本身的值。

df.write.mode(SaveMode.Overwrite).save( “位置/ inserttime = '20170818-0831'”)

希望这有帮助。