如何从sql(不是DSL)访问Spark嵌套结构字段
在下文中sql,需要访问嵌套的语法struct。
具体如下第三行:
collect_list(struct( .. ) )
我已经提出rec.*但这当然不是正确的方法。
select matchMethod, rec.* from
(select first(matchMethod) matchMethod,
collect_list(struct(rawTp,tp,fp,fn,
precision,recall,weight,F1,
truthGrpId,entityId,
tpIds,fpIds, fnIds,truthIds,actuals)) rec
from scoring5
where entityId is not null and truthGrpId is not null
group by truthGrpId
) order by rec.truthGrpId, rec.recall desc
这导致:
org.apache.spark.sql.AnalysisException:
Can only star expand struct data types. Attribute: ArrayBuffer(rec)
;
我们正在使用spark 2.3.X。
目前不支持上述内容。似乎有一些帮助以下列形式出现Spark 2.4:请参阅Jacek Laskowski的回答:
在任何情况下,我发现使用windowing如下函数更直接的方法:
select * from
(select row_number() over (partition by truthGrpId order by recall desc) rownum,*
from
(select matchMethod, rawTp,tp,fp,fn,
precision,recall,weight,F1,
truthGrpId,entityId,
tpIds,fpIds, fnIds,truthIds,actuals
from scoring5
where entityId is not null and truthGrpId is not null
) order by truthGrpId, recall desc
) where rownum=1 order by truthGrpId""")
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。