【问题标题】: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.;

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

【问题讨论】:

    标签: scala apache-spark apache-spark-sql


    【解决方案1】:

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

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

    group by grades.subject_grades.subject
    

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

    【讨论】:

      猜你喜欢
      • 2015-11-16
      • 1970-01-01
      • 2016-03-10
      • 2021-10-06
      • 2015-02-18
      • 2014-10-27
      • 2022-01-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多