首页 > 解决方案 > 使用 spark 向量化一组行

问题描述

我正在尝试对一组行进行矢量化,并根据时间范围将它们分组在一起(可能是按年/月/周)

例如。

| Date      | Id | some_col | data ||
|2017-05-01 | 1  | abc      | 32  ||
|2017-06-01 | 1  | abc      | 21  ||
|2017-07-01 | 1  | abc      | 34  ||
|2018-01-01 | 1  | abc      | 5   ||
|2018-02-01 | 1  | abc      | 3   ||
|2018-03-01 | 1  | abc      | 3   ||
|2017-05-01 | 2  | abc      | 132 ||
|2017-06-01 | 2  | abc      | 121 ||
|2017-07-01 | 2  | abc      | 134 ||
|2018-01-01 | 2  | abc      | 15  ||
|2018-02-01 | 2  | abc      | 13  ||
|2018-03-01 | 2  | abc      | 13  ||

我想要得到的是这样的:

| Year| Id | data            ||
|2017 | 1  |  [32,21,34]     ||
|2017 | 2  | [132, 121, 134] ||
|2018 | 1  |  [5, 3, 3]      ||
|2018 | 2  | [15, 13, 13]    ||

标签: apache-sparkapache-spark-sql

解决方案


我认为以下内容可能会对您有所帮助。

    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]      |
+----+---+---------------+

如果它对你有帮助,请告诉我。


推荐阅读