Apache Spark Window-Funktion mit verschachtelter Spalte

Ich bin mir nicht sicher, ob dies ein Fehler ist (oder nur eine falsche Syntax). Ich habe mich umgesehen und habe dies an keiner anderen Stelle erwähnt. Deshalb frage ich hier, bevor ich einen Fehlerbericht einreiche.

Ich versuche, eine Fensterfunktion zu verwenden, die in einer verschachtelten Spalte partitioniert ist. Ich habe unten ein kleines Beispiel erstellt, das das Problem veranschaulicht.

import sqlContext.implicits._
import org.apache.spark.sql.functions._
import org.apache.spark.sql.expressions.Window

val data = Seq(("a", "b", "c", 3), ("c", "b", "a", 3)).toDF("A", "B", "C", "num")
  .withColumn("Data", struct("A", "B", "C")).drop("A").drop("B").drop("C")
val winSpec = Window.partitionBy("Data.A", "Data.B").orderBy($"num".desc)
data.select($"*", max("num").over(winSpec) as "max").where("num = max").drop("max").show

Das oben Gesagte führt zu einem Fehlerorg.apache.spark.sql.AnalysisException: resolved attribute(s) A#39,B#40 missing from num#33,Data#37 in operator !Project [num#33,Data#37,A#39,B#40]; at org.apache.spark.sql.catalyst.analysis.CheckAnalysis$class.failAnalysis(CheckAnalysis.scala:38) at org.apache.spark.sql.catalyst.analysis.Analyzer.failAnalysis(Analyzer.scala:44) ...

Wenn diese Spalten nicht verschachtelt sind, funktioniert dies problemlos. Fehlt mir etwas an der Syntax oder ist das ein Fehler?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage