从java中的时间戳开始按月分组数据集

问题描述 投票:0回答:2

我已经使用java中的spark会话将表中的所有行加载到Dataset中。我想得到每个月的行数。

我尝试使用withColumn()创建月份的新列,以便稍后我可以使用group_by month和count()。但我无法从时间戳获得月份。如何从上面的数据集中找到每个月的计数?

我的样本数据集将如下所示,

enter image description here

java apache-spark group-by cassandra apache-spark-dataset
2个回答
1
投票

考虑一下你解释问题的方式:我尝试使用withColumn()创建一个月的新列,以便以后可以使用group_by month和count()。但我无法从时间戳获得月份。

你可以在org.apache.spark.sql.functions包中提供静态month()函数来查找月份,如下所示:

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

其中col(“date”)将具有时间戳(在下面的情况下:“yyyy-mm-dd HH:mm:ss”)。

使用的输入:

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

2,2019-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|

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

希望这可以帮助!!


1
投票

我相信你可以使用Tuple2 <>类型

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

这样,您最终会得到一张地图,其中日期为关键字,并将这些日期的数量计为值。我希望有所帮助

© www.soinside.com 2019 - 2024. All rights reserved.