Групповой набор данных по месяцам с отметкой времени в java

Я загрузил все строки из таблицы в набор данных, используя сеанс spark в Java. Я хочу получить количество строк в каждом месяце.

Я попытался создать новый столбец месяца с помощью withColumn(), чтобы позже я мог использовать group_by month и count(). Но я не могу получить месяц от отметки времени. Как я могу найти количество в каждом месяце сверху набора данных?

Мой образец набора данных будет выглядеть так,

1 ответ

Учитывая то, как вы объяснили свою проблему: я попытался создать новый столбец месяца, используя withColumn(), чтобы позже я мог использовать group_by month и count(). Но я не могу получить месяц от отметки времени.

Вы можете использовать функцию static month (), предоставленную в пакете org.apache.spark.sql.functions, чтобы найти месяц, как показано ниже:

myDataset.withColumn("month", month(col("date"))).groupBy(col("month")).count().show();

где col("дата") будет иметь метку времени (в нижнем регистре: "гггг-мм-дд чч: мм: сс").

Используемые входные данные:

1,2019-04-07 07:24:14,0,8

2 229 05-07 07: 24: 14,0,10

5,2019-06-07 07: 24: 14,0,6

3,2019-04-07 07: 24: 14,0,7

Это даст вам вывод, как показано ниже:

+ ----- + ----- +

| Месяц | Количество |

+ ----- + ----- +

| 6 | 1 |

| 5 | 1 |

| 4 | 2 |

+ ----- + ----- +

Надеюсь это поможет!!

Я считаю, что вы можете использовать тип Tuple2<>

Map<Date, Integer> = myDataSetRDD.map(x -> new Tuple2<Date, Integer>(x.getDate(), 1))
            .reduceByKey((x, v) -> x + v)
            .collectAsMap();

Таким образом, вы получите карту с датами в качестве ключей и количеством этих дат в качестве значений. Надеюсь, это поможет

Другие вопросы по тегам