我有一个带有列类型Map的配置单元表,在运行以下Spark SQL查询时遇到错误:
df = spark.sql("""select distinct name, details from table_name""");
分析异常:调用集合操作(INTERSECT、EXCEPT等)的DataFrame中不能有Map类型的列,但列明细类型为map<字符串,字符串>;
df = spark.sql("""select name, details
from table_name
group by name, details""");
分析异常:表达式TABLE_NAME.DETAILS不能用作分组表达式,因为其数据类型Map<STRING,STRING>不是可排序的数据类型。
表:
Column_name datatype
----------------------------------------
name string
details map<string,string>
2条答案
按热度按时间llycmphe1#
您可以首先使用
ROW_NUMBER()
窗口函数枚举分区内的行,然后只选择ROW_NUMBER
结果为1
的行。示例输入:
仅提取不同的记录:
guz6ccqo2#
似乎可以使用
map_entries
将Map列转换为结构数组,然后获取DISTINCT。然后将其转换回Map列。以下是一个有效的示例