我想把一列
array(map(varchar, varchar))
通过来自jupyter笔记本python3的pysparkhivesql以编程方式将字符串作为prestodb上的表的行。
这些例子
user_id sport_ids
'aca' [ {'sport_id': '5818'}, {'sport_id': '6712'}, {'sport_id': '1065'} ]
预期结果
user_id. sport_ids
'aca'. '5815'
'aca'. '5712'
'aca'. '1065'
我试过了
sql_q= """
select distinct, user_id, transform(sport_ids, x -> element_at(x, 'sport_id')
from tab """
spark.sql(sql_q)
但出现错误:
'->' cannot be resolved
我也试过
sql_q= """
select distinct, user_id, sport_ids
from tab"""
spark.sql(sql_q)
但出现错误:
org.apache.spark.sql.AnalysisException: Cannot have map type columns in DataFrame which calls set operations(intersect, except, etc.), but the type of column request_features[0] is map<string,string>;;
我错过什么了吗?
我试过这个,但很有帮助hive convert array<map<string, string>> to stringExtract map(varchar, array(varchar)) - Hive SQL
谢谢
2条答案
按热度按时间xtfmy6hx1#
让我们尝试使用高阶函数来查找Map值并分解为单独的行
aurhwmvo2#
您可以处理json数据(
json_parse
,转换为json和json_extract_scalar
的数组-对于更多的json函数-see here),并在presto侧展平(unnest
):输出量:
| 用户标识|运动标识|
| - -|- -|
| akka |小行星5818|
| akka |小行星6712|
| akka |一○六五|