【问题标题】:Insert Spark DF as column in existing hive table在现有配置单元表中插入 Spark DF 作为列
【发布时间】:2021-12-11 01:39:45
【问题描述】:

我正在寻找一种将列 spark DF 附加到现有 Hive 表的方法,我正在使用下面的代码覆盖该表,但仅在 df 模式和 hive 表模式相等时才有效,但有时我需要添加一列,因为模式不匹配它不起作用。 有没有办法将 df 作为列附加?

或者我必须在 spark.sql() 中创建一个 ALTER TABLE ADD 列?

temp = spark.table('temp')
temp.write.mode('overwrite').insertInto(datalab + '.' + table,overwrite=True)

希望我的问题可以理解,谢谢。

【问题讨论】:

  • 为什么不使用saveAsTable 而不是insertIntotemp.write.saveAsTable(f"{datalab}.{table}", mode="overwrite")
  • overwrite=True,你的意思是要覆盖temp 表吗?
  • SaveAsTable 一直显示这个错误,我只能通过使用 insertInto 和 Alter Table 来避免:“无法创建托管表('db.table')。关联的位置('hdfs://path/table') 已经存在。;"
  • 通过覆盖我的意思是我想用我当前的df覆盖hive表,因为它需要以相同的名称保存并且内容已经改变

标签: pyspark hive apache-spark-sql


【解决方案1】:

您可以通过以下方式获取包含新数据集的数据框,然后将其附加到现有表中。

new_data_df = df with additional columns   
new_data_df.write.mode('append').saveAsTable('same_table_name', mergeSchema=True)

假设,您添加的新列是“column_new”,表中较旧的记录将设置为空值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-30
    • 2020-07-26
    • 1970-01-01
    • 1970-01-01
    • 2017-07-02
    • 2019-07-15
    • 1970-01-01
    相关资源
    最近更新 更多