apache-spark - 无法使用 SQL 查询从 PySpark 获取地图对象
问题描述
我已经构建了一个读取 parquet 文件的代码,通过 SQL 查询对其进行查询——而我使用的是 udf(udf 获取一个列表对象并返回一个字典对象),然后也将其保存为 parquet。
作为输出,我想获得一个 Map 类型,在我从 udf (字典)返回的列中。
但我得到一个字符串类型。
UDF:
def udf_count_frequencies(elements):
if not elements:
return None
counter = Counter()
for e in elements:
e = unicode(e).encode('utf-8').strip()
counter[e] += 1
return dict(counter)
SQL:
select user_id, count_frequencies(collect_list(group))
from user_likes
group by 1
如何查询数据,并在我保存它时返回将列设置为映射的响应 - 并且不将其转换为字符串?
解决方案
您是否尝试提供您的 udf 地图类型?
udf_flatten_counter = udf(
lambda x: dict(Counter(x)),
MapType(StringType(), IntegerType()))