在java中,根据时间戳按月对spark数据集进行分组

在java中,根据时间戳按月对spark数据集进行分组,java,apache-spark,group-by,cassandra,apache-spark-dataset,Java,Apache Spark,Group By,Cassandra,Apache Spark Dataset,我已经使用java中的spark会话将表中的所有行加载到数据集中。我想得到每个月的行数 我尝试使用withColumn()创建新的月份列,以便以后可以使用group_by month和count()。但我无法从时间戳中获取月份。如何从上述数据集中查找每月的计数 我的示例数据集如下所示 我相信您可以使用Tuple2类型 Map=mydatasetdd.Map(x->new Tuple2(x.getDate(),1)) .还原基((x,v)->x+v) .collectAsMap(); 这样,您就

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

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

我的示例数据集如下所示


我相信您可以使用Tuple2类型

Map=mydatasetdd.Map(x->new Tuple2(x.getDate(),1))
.还原基((x,v)->x+v)
.collectAsMap();
这样,您就得到了一个地图,它以日期作为键,并将这些日期计数为值。
我希望这有帮助

我相信您可以使用Tuple2类型

Map=mydatasetdd.Map(x->new Tuple2(x.getDate(),1))
.还原基((x,v)->x+v)
.collectAsMap();
这样,您就得到了一个地图,它以日期作为键,并将这些日期计数为值。
考虑到您解释问题的方式,我希望这对您有所帮助: 我尝试使用withColumn()创建新的月份列,以便以后可以使用group_by month和count()。但我无法从时间戳中获取月份

您可以使用org.apache.spark.sql.functions包中提供的static month()函数查找月份,如下所示:

myDataset.withColumn(“月”)、month(col(“日期”)).groupBy(col(“月”)).count().show()

其中col(“日期”)将具有时间戳(在以下情况下为:“yyyy-mm-dd HH:mm:ss”)

使用的输入:

12019-04-07 07:24:14,0,8

22019-05-07 07:24:14,0,10

52019-06-07 07:24:14,0,6

32019-04-07 07:24:14,0,7

这将为您提供如下输出:

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

|月数|

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

|6 | 1|

|5 | 1|

|4 | 2|

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


希望这有帮助

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

您可以使用org.apache.spark.sql.functions包中提供的static month()函数查找月份,如下所示:

myDataset.withColumn(“月”)、month(col(“日期”)).groupBy(col(“月”)).count().show()

其中col(“日期”)将具有时间戳(在以下情况下为:“yyyy-mm-dd HH:mm:ss”)

使用的输入:

12019-04-07 07:24:14,0,8

22019-05-07 07:24:14,0,10

52019-06-07 07:24:14,0,6

32019-04-07 07:24:14,0,7

这将为您提供如下输出:

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

|月数|

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

|6 | 1|

|5 | 1|

|4 | 2|

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

希望这有帮助

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