Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.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
Scala spark rdbms:覆盖模式的工作方式与附加模式不同_Scala_Apache Spark_Apache Spark Sql_Spark Streaming - Fatal编程技术网

Scala spark rdbms:覆盖模式的工作方式与附加模式不同

Scala spark rdbms:覆盖模式的工作方式与附加模式不同,scala,apache-spark,apache-spark-sql,spark-streaming,Scala,Apache Spark,Apache Spark Sql,Spark Streaming,我正在使用Spark 3.0.0-preview并尝试将数据集保存到PostgreSQL数据库。以下是我正在遵循的步骤: 从表A中获取数据 从表B中获取与表A相同的结构的数据 使用表a和表b执行左反联接b/w。这样做是为了从表b中获取不在表a中的行 将表A与步骤3的结果连接起来。这样做是为了从表A和B中获得唯一的行。 使用覆盖模式将结果保存到表B 实际:数据库中仅更新表a中的行。 预期:应在数据库中更新表A和步骤3的记录的联合。 分析:如果我将模式用作“追加”,记录计数是正确的,但我希望截断表而

我正在使用Spark 3.0.0-preview并尝试将数据集保存到PostgreSQL数据库。以下是我正在遵循的步骤:

从表A中获取数据 从表B中获取与表A相同的结构的数据 使用表a和表b执行左反联接b/w。这样做是为了从表b中获取不在表a中的行 将表A与步骤3的结果连接起来。这样做是为了从表A和B中获得唯一的行。 使用覆盖模式将结果保存到表B 实际:数据库中仅更新表a中的行。 预期:应在数据库中更新表A和步骤3的记录的联合。 分析:如果我将模式用作“追加”,记录计数是正确的,但我希望截断表而不是追加

代码:


我的代码中的问题是,我试图覆盖从中读取的同一个表

要解决此问题,我必须首先缓存该值,如下所示:

val tableB = spark.read.format("jdbc").option("url", 
"jdbc:postgresql://localhost:5432/test")
.option("user", "sample")
.option("password", "sample")
.option("query", "select t.uid, t.employer_key, t.name from test.table_b t")
.load().cahce()
tableB.show(2)
执行一些操作以强制spark加载数据,如下所示:

val tableB = spark.read.format("jdbc").option("url", 
"jdbc:postgresql://localhost:5432/test")
.option("user", "sample")
.option("password", "sample")
.option("query", "select t.uid, t.employer_key, t.name from test.table_b t")
.load().cahce()
tableB.show(2)

谢谢你,@JDev。我也面临着同样的问题,这个解决方案对我有效。