Групповой набор данных по месяцам с отметкой времени в 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();
Таким образом, вы получите карту с датами в качестве ключей и количеством этих дат в качестве значений. Надеюсь, это поможет