我正在使用Spark 1.6。我有一个由6列的镶木地板文件生成的数据框。我正在尝试对数据帧中的行进行分组(partitionBy)和order(orderBy),以便稍后在数组中收集这些列。
我不确定在Spark 1.6中是否可以执行此操作,但在以下答案中,它们显示了如何完成此操作:
基于这些答案,我写了以下代码:
val sqlContext: SQLContext = new HiveContext(sc)
val conf = sc.hadoopConfiguration
val dataPath = "/user/today/*/*"
val dfSource : DataFrame = sqlContext.read.format("parquet").option("dateFormat", "DDMONYY").option("timeFormat", "HH24:MI:SS").load(dataPath)
val w = Window.partitionBy("code").orderBy("date".desc)
import org.apache.spark.sql.expressions.Window
import org.apache.spark.sql.functions.row_number
val dfCollec = dfData.withColumn("collected", collect_list(struct("col1","col2","col3","col4","col5","col6")).over(w))
所以,我按照Ramesh编写的模式,我创建了基于Hive的sqlContext为Zero推荐。但我仍然收到以下错误:
java.lang.UnsupportedOperationException: ' collect_list(struct(' col1,' col2,' col3,' col4,' col5,' col6))不是 窗口操作支持。 at org.apache.spark.sql.expressions.WindowSpec.withAggregate(WindowSpec.scala:191) 在org.apache.spark.sql.Column.over(Column.scala:1052)
我还缺少什么?