【问题标题】:PySpark insertInto overwritePySpark insertInto 覆盖
【发布时间】:2020-08-06 18:49:24
【问题描述】:

我正在尝试将数据框中的数据插入 Hive 表。我已经能够成功地使用 df.write.insertInto("db1.table1", overwrite = True).

我对@9​​87654322@ 部分有点困惑——我尝试多次运行它,它似乎是追加的,而不是覆盖的。文档中没有太多内容,但我应该何时将覆盖设置为 FalseTrue

【问题讨论】:

    标签: python apache-spark pyspark hive


    【解决方案1】:

    df.insertInto 仅在 table already exists 在 hive 中有效。

    df.write.insertInto("db.table1",overwrite=False) 会将数据append 放到现有的 hive 表中。

    df.write.insertInto("db.table1",overwrite=True)overwritehive表中的数据。

    示例:

    df.show()
    #+----+---+                                                                                                                                                                              
    #|name| id|
    #+----+---+
    #|   a|  1|
    #|   b|  2|
    #+----+---+
    
    #save the table to hive
    df.write.saveAsTable("default.table1")
    
    #from hive
    #hive> select * from table1;
    #OK
    #a       1
    #b       2
    
    df.write.insertInto("moch.table1",overwrite=True)
    
    #from hive
    #hive> select * from table1;
    #OK
    #a       1
    #b       2
    
    #appending data to hive
    df.write.insertInto("moch.table1",overwrite=False)
    
    #from hive
    #hive> select * from table1;
    #OK
    #a       1
    #b       2
    #a       1
    #b       2
    

    【讨论】:

    • 如何插入到未创建配置单元表的 S3 位置? ETL 作业只是将数据加载到 S3 以供下游进程使用,但不需要创建表
    • 感谢乐于助人的用户。改进示例的一个小建议是使用不同的数据框来演示 df.write.insertInto("moch.table1",overwrite=True)。目前,不清楚是表本身被覆盖还是重复行被更新。
    猜你喜欢
    • 2021-05-23
    • 2020-12-26
    • 2021-11-10
    • 2016-06-22
    • 2018-02-22
    • 2019-12-26
    • 1970-01-01
    • 2017-07-07
    相关资源
    最近更新 更多