首页 > 解决方案 > Spark SQL 合并

问题描述

我已经使用 Spark SQL 从表中提取了合并值。然后我将结果转换为字符串,以便我可以将该值插入到另一个表中。

但是, COALESCE 的列名被插入到表中,而不是合并值。

这些是我的 COALESCE 和 INSERT 查询,

COALESCE:
---------

val lastPartition = spark.sql("SELECT COALESCE(MAX(partition_name), 'XXXXX') FROM db1.table1").toString.mkString

Result:
-------

COALESCE(MAX(partition_name),XXXXX
            20210309



INSERT:
-------

val result = spark.sql(s"""INSERT INTO db2.table2 VALUES ('col1','col2','${lastPartition}','col4')""")


Result:
--------

col1     col2                       col3                                 col4
1        John    [COALESCE(MAX(partition_name),XXXXX):string]        15313.21

在这里,我希望列 (col3) 的值为 20210309 而不是合并列名。

标签: scalaapache-sparkapache-spark-sql

解决方案


您需要使用.head().getString(0)来获取字符串作为变量。否则,如果你使用.toString,你会因为惰性求值而得到表达式。

val lastPartition = spark.sql("SELECT COALESCE(MAX(partition_name), 'XXXXX') FROM db1.table1").head().getString(0)

推荐阅读