我有一个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
答案 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'”)
希望这有帮助。