Я думаю, что это может вам помочь.
scala> val df = spark.read.option("header",true).option("sep","|").csv("test2.csv")
scala> val transformedDF = df.withColumn("year",year(col("Date")))
.groupBy(col("year"), col("Id"))
.agg(collect_list(col("data")).as("data"))
scala> transformedDF.show(false)
+----+---+---------------+
|year|Id |data |
+----+---+---------------+
|2017|1 |[32, 21, 34] |
|2017|2 |[132, 121, 134]|
|2018|2 |[15, 13, 13] |
|2018|1 |[5, 3, 3] |
+----+---+---------------+
Пожалуйста, дайте мне знать, если это поможет вам.