sparksql合并

bxgwgixi  于 2021-07-12  发布在  Spark
关注(0)|答案(1)|浏览(283)

我使用sparksql从表中提取了coalesce值。然后我将结果转换为字符串,以便将该值插入到另一个表中。
但是,coalesce的列名将被插入到表中,而不是coalesce值。
这些是我的合并和插入查询,

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

这里,我希望column(col3)的值是20210309,而不是coalesce列名。

dohp0rv5

dohp0rv51#

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

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

相关问题