В следующем 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)`;
Были предприняты многие другие способы.Я также изучил около десяти других вопросов здесь о SOF, но ни один из них не касается непосредственно специально для SQL
, а не для DSL
.. Возможно ли это вообще?
Я согласеннеясно, означает ли сообщение Can only star expand struct data types
, что для достижения этого может использоваться другой синтаксис, или же здесь просто есть недостаток в spark sql.
Мы используем spark 2.3.X
.