Векторизация группы строк с использованием искры - PullRequest
0 голосов
/ 11 марта 2020

Я пытаюсь векторизовать группу строк, объединяя их вместе на основе таймфрейма (может быть по году / месяцу / неделе)

Например.

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

1 Ответ

1 голос
/ 12 марта 2020

Я думаю, что это может вам помочь.

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

Пожалуйста, дайте мне знать, если это поможет вам.

...