如何对记录数组的数组中的字段进行分组?

Posted

技术标签:

【中文标题】如何对记录数组的数组中的字段进行分组?【英文标题】:How to group by on a field inside an array of an array of records? 【发布时间】:2017-06-30 14:14:58 【问题描述】:

我有以下架构 -

[名称:StringType,等级:ArrayType( 结构类型( StructField(subject_grades, ArrayType(StructType(StructField(subject,StringType,false), StructField(grade,LongType,false)]

我想 groupby 在等级数组内的 subject_grades 数组内的主题字段上。

我试过了

sql.sql("select ... from grades_table group by grades.subject_grades.subject") 

但我明白了

org.apache.spark.sql.AnalysisException: cannot resolve 'grades.subject_grades[subject]' due to data type mismatch: argument 2 requires integral type, however, 'subject' is of string type.;

我明白为什么会出现此错误,但是我希望我可以避免爆炸整个事物以便在内部字段上进行分组。

【问题讨论】:

【参考方案1】:

当主查询需要其中的元素时,数组(相对)难以使用并恳求explode(或flatMap)使用它们,例如用于分组。

我从问题中学到的一点是,subject_grades 类型为 ArrayType 的以下子句被转换为 subject 为索引的子句,因此需要整数类型.

group by grades.subject_grades.subject

除了使用explode(或flatMap)来“解构”subject_grades 数组并进行分组之外,我没有别的办法。

【讨论】:

以上是关于如何对记录数组的数组中的字段进行分组?的主要内容,如果未能解决你的问题,请参考以下文章

如何对数组中的日期进行分组?

如何根据反应中的状态属性对数组中的元素进行分组?

如何对数组中的连续整数进行分组?

如何在js中对数组中的数据进行分组

如何对 MongoDB 中数组内的字段值进行分组?

如何使用 MongoDB 根据数组元素对记录进行分组