当前位置: 首页 > 知识库问答 >
问题:

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

荀俊迈
2023-03-14

我有以下模式-

[名称:StringType,Grades:ArrayType(StructType(StructField(subject_grades),ArrayType(StructType(StructField(subject,StringType,false)),StructField(grade,LongType,false)

我想在subject_grades数组中的subject字段上groupby,该数组位于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个答案

戚衡
2023-03-14

数组(相对来说)很难使用,当主查询需要内部元素(例如用于分组)时,需要explode(或flatmap)来使用它们。

我从这个问题中学到的一点是,下面的subject_grades类型为arraytype的子句被转换为以subject为索引的子句,因此需要整型。

group by grades.subject_grades.subject

除了使用explode(或flatmap)来“分解”subject_grades数组并进行分组之外,我别无选择。

 类似资料:
  • 问题是: 你有N (N代表你拥有的数字的数量)个数字。将他们分成两组,使各组数字之和的差异最小。 例子: 如果我们把1、9和3放在A组,把5和8放在B组,差异是0。 我认为首先我应该计算所有数字的总和并将其除以2。然后检查任何可能的数字组合,其总和不大于所有数字之和的一半。完成此操作后,我将选择最大的数字并打印出组。 我对所有的组合都有问题,特别是当N是大数字时。如何运行所有组合? 我的想法也有点

  • 有人知道一种方法(如果可能的话也可以使用lodash)通过对象键对对象数组进行分组,然后根据分组创建新的对象数组吗?例如,我有一个汽车对象数组: 我想制作一个由分组的新汽车对象数组:

  • 我正在和Kafka经纪人联系阿帕奇·Flink。 我随机收到了以下消息: 消息(时间戳=[…],索引=1,someData=[…]) 消息(时间戳=[…],索引=2,someData=[…]) 消息(时间戳=[…],索引=3,某些数据=[…]) 消息(时间戳=[…],索引=2,someData=[…]) 消息(时间戳=[…],索引=3,某些数据=[…]) 消息(时间戳=[…],索引=1,someD

  • 这听起来有点令人困惑,我不知道如何用语言表达,但我很难找到这个问题的解决方案。 我想按行“分组”,并使用数字相同的“digit”列在表中对行进行计数,而不管数字的位置如何。 例子: 这是桌子 答案是:使用count() 其他详细信息: 数字列为数字 mysql版本是来自cpanel的82。

  • 我有以下 3 份文件。每个代表一个用户的联系人: 我需要通过数组元素对它们进行聚合/分组,这样我就可以识别重复的联系人(基于电子邮件id)。因为在文档(1 我尝试在java中使用$unwind和$group执行此操作,如下所示: 这按电子邮件ID对文档进行分组(这是正确的),但没有达到目的。 任何帮助都将不胜感激。 我需要实现的功能,用户可以在他的存储库可能重复的联系人提示。我需要聚合结果类似于:

  • 问题内容: MongoDB菜鸟在这里… 好的,我有一个学生集合,每个学生的记录看起来都如下所示:我想按降序对“类型”:“作业”分数进行排序。 mongo外壳上的咒语是什么样的? 我正在尝试这个咒语… 但它不起作用。 问题答案: 您将需要在应用程序代码中或在MongoDB 2.2中使用新的AggregationFramework来操纵嵌入式数组。 Shell中的示例聚合: 样本输出: