如何在sparksql中按名称应用union,而不是union或union all

问题描述 投票:0回答:1

当我在旧的 SparkSQL 版本中运行查询时,例如

select * from 
    (select 10 as student_type,'henry' as student_name
      union 
     select 'tom' as student_name,90 as student_type,
    );

然后我得到这样的结果:

学生类型 学生姓名
10 亨利
汤姆 90

在sparksql中,'UNION'通过这种方法无法匹配列; 但是,在 Spark 数据框中,我可以使用“unionByName”合并两个数据框。 那么我如何在sparksql中使用像“unionByName”这样的语法?

期望是:

学生类型 学生姓名
10 亨利
90 汤姆
apache-spark apache-spark-sql
1个回答
0
投票

您可以在合并之前对列名称进行排序

SELECT *
FROM (
    SELECT SORT_ARRAY(ARRAY(*)) 
        FROM (SELECT 10 AS student_type,'henry' AS student_name)
    UNION 
    SELECT SORT_ARRAY(ARRAY(*)) 
        FROM (SELECT 'tom' AS student_name, 90 AS student_type)
);

示例运行:

spark-sql (default)> SELECT *
                   > FROM (
                   >     SELECT SORT_ARRAY(ARRAY(*)) 
                   >         FROM (SELECT 10 AS student_type,'henry' AS student_name)
                   >     UNION 
                   >     SELECT SORT_ARRAY(ARRAY(*)) 
                   >         FROM (SELECT 'tom' AS student_name, 90 AS student_type)
                   > );
["10","henry"]
["90","tom"]
Time taken: 0.11 seconds, Fetched 2 row(s)
© www.soinside.com 2019 - 2024. All rights reserved.