Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 如何在不复制的情况下将Spark数据框插入配置单元内部表?_Apache Spark_Hive_Apache Spark Sql - Fatal编程技术网

Apache spark 如何在不复制的情况下将Spark数据框插入配置单元内部表?

Apache spark 如何在不复制的情况下将Spark数据框插入配置单元内部表?,apache-spark,hive,apache-spark-sql,Apache Spark,Hive,Apache Spark Sql,所以将spark dataframe直接附加到配置单元表的命令是 df.write().mode("append").saveAsTable("tableName") 但是append模式是否确保它将避免重复行? 例如: 如果行A在配置单元表中,其也在spark数据帧中 将spark数据框附加到配置单元表将导致两行 有没有办法确保追加时不会发生重复 编辑: 有两条路要走: 如所述,加载配置单元表作为spark dataframe,合并两个dataframe,删除重复项并以“overwri

所以将spark dataframe直接附加到配置单元表的命令是

df.write().mode("append").saveAsTable("tableName")
但是append模式是否确保它将避免重复行? 例如:

  • 如果行A在配置单元表中,其也在spark数据帧中
  • 将spark数据框附加到配置单元表将导致两行
有没有办法确保追加时不会发生重复

编辑: 有两条路要走:

  • 如所述,加载配置单元表作为spark dataframe,合并两个dataframe,删除重复项并以“overwrite”模式写回配置单元表
  • 其次,将配置单元表加载到临时表中,将数据帧附加到临时表中,获取不同的行,并将临时表覆盖回配置单元表
我要寻找的是,有没有一种方法可以直接完成所有的工作,而不需要中间步骤将数据写入某个临时表或数据帧


谢谢。

df.write无法满足您的任何要求。很抱歉也就是说,您可能会得到2行。

将spark数据框附加到配置单元表将导致两行A

确保追加时不会发生重复

  • 您需要将整个配置单元表加载到另一个数据帧(df1)中 将数据添加到表中之前

  • 然后,将两个数据帧(df,df1)合并并应用
    .dropDuplicates()
    (或)
    窗口功能
    从复制的 记录

    示例:

    union\u df=df.union(df1)

    union\u df.dropDuplicates()
    (或)
    使用窗口功能

  • 然后将数据写入新的 表(
    union_df.write().mode(“append”).saveAsTable(“newtableName”)
    ) 然后最后从新表中选择数据覆盖 现有配置单元表。

    示例:

    spark.sql(“插入覆盖表。选择*自”)

  • 最后扔掉那张新桌子
    spark.sql(“拖放表”)

  • 通过使用这种方式,您将不会在配置单元表中复制数据