我有一个列类型为MAP的配置单元表,在运行以下Spark SQL查询时出现错误:
表格结构:
第一个
分析异常:调用集合操作(intersect、except等)的DataFrame中不能有map类型的列,但列明细的类型为map〈string,string〉;
df = spark.sql("""select name, details
from table_name
group by name, details""")
分析异常:表达式table_name.details不能用作分组表达式,因为其数据类型Map〈string,string〉不是可排序的数据类型。
df = spark.sql("""
WITH cte_row_num AS (
SELECT name
,details
,ROW_NUMBER() OVER (
PARTITION BY name
,details
ORDER BY name) as row_num
FROM table_name)
SELECT name
,details
FROM cte_row_num
WHERE row_num = 1
""")
java.lang.IllegalStateException:分组/联接/窗口分区键不能是Map类型
2条答案
按热度按时间bmp9r5qi1#
您可以先使用
ROW_NUMBER()
窗口函数枚举分区内的行,然后只选择ROW_NUMBER
结果为1
的行。输入示例:
仅提取不同的记录:
7hiiyaii2#
看起来你可以用
map_entries
把map列转换成结构体数组,然后取一个distinct,再把它转换回map列。下面是一个工作示例