当我在旧的 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 | 汤姆 |
您可以在合并之前对列名称进行排序
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)