Я не уверен, что это ошибка (или просто неправильный синтаксис). Я искал вокруг и не видел, чтобы это упоминалось в другом месте, поэтому я спрашиваю здесь, прежде чем подавать отчет об ошибке.
Я пытаюсь использовать функцию окна, разделенную на вложенный столбец. Ниже я создал небольшой пример, демонстрирующий проблему.
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
Вышеуказанное приводит к ошибке org.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)
...
Если вместо этого эти столбцы не вложены, все работает нормально. Мне что-то не хватает в синтаксисе или это ошибка?