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
如何覆盖spark scala中的特定表分区_Scala_Apache Spark_Intellij Idea_Apache Spark Sql_Scala Collections - Fatal编程技术网

如何覆盖spark scala中的特定表分区

如何覆盖spark scala中的特定表分区,scala,apache-spark,intellij-idea,apache-spark-sql,scala-collections,Scala,Apache Spark,Intellij Idea,Apache Spark Sql,Scala Collections,我有一个按日期划分的表,我试图覆盖一个特定的分区,但是 当我尝试下面的代码时,它会覆盖整个表 query.write.partitionBy("date").mode(SaveMode.Overwrite).format("orc").insertInto(mytableName) 但是我想通过提供分区列名及其值来覆盖特定分区 类似于分区(日期为2021年1月20日) 有没有办法覆盖特定分区?您可以指定要覆盖的分区的完整路径。在这种情况下,您不需要执行q

我有一个按日期划分的表,我试图覆盖一个特定的分区,但是 当我尝试下面的代码时,它会覆盖整个表

query.write.partitionBy("date").mode(SaveMode.Overwrite).format("orc").insertInto(mytableName)
但是我想通过提供分区列名及其值来覆盖特定分区 类似于分区(日期为2021年1月20日)


有没有办法覆盖特定分区?

您可以指定要覆盖的分区的完整路径。在这种情况下,您不需要执行
query.write.partitionBy(“日期”)
,您需要在写入之前删除
date
列:

query.drop("date")
  .write
  .mode("overwrite")
  .format("orc")
  .save("/data/mytableName/date=20-01-2021")

尝试此方法并适应您的具体情况:

需要在蜂箱或spark中设置桌子

该方法是动态的:

spark.conf.set("spark.sql.sources.partitionOverwriteMode", "dynamic")
import org.apache.spark.sql.types._

val df = spark.range(9).map(x => (x, (x + 100) % 3)).toDF("c1", "c2")
df.repartition($"c2")
  .write
  .partitionBy("c2")
  .mode("overwrite").saveAsTable("tabX")
在安装后,以这种方式更新一个人为分区

val df2 = spark.range(1).map(x => (x, (x + 100) % 3)).toDF("c1", "c2")
df2.repartition($"c2")
   .write
   .mode("overwrite").insertInto("tabX")
观察效果并根据您的具体情况进行调整

// from 9 -> 7 entries, pls run
val df3 = spark.table("tabX")
df3.show(false)

谢谢你的回复。但是有没有办法不给出分区列的路径呢。?我正在尝试一种情况,在这种情况下,日期和表值将发生变化,并作为variable@M_Still_Learning不,你不能。您必须重写所有的表,或者像上面那样直接写入给定的分区。您可以使用变量格式化路径。我试图覆盖到表路径中,但插入了零条记录。你能帮你吗?@M_还不知道有什么问题吗?您有任何错误吗?您应该使用merge语句并进行分区修剪以进行更新或动态覆盖任何分区。谢谢。但我试图在一个特定的分区列值中覆盖,而不是分区列。我能够插入到一个特定的列中,而不是上面提到的列值。你能帮忙吗?我不太明白。