2017-06-30 65 views
1

我有以下模式 -如何根據記錄數組數組中的字段進行分組?

[名稱:StringType,等級:數組類型( StructType( StructField(subject_grades, 數組類型(StructType(StructField(主題,StringType,假的),StructField(等級,LongType,假)]

groupbysubject_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數組並分組。

+1

我看過你的書,怎麼能不把它當作答案:) – Raytracer

相關問題