我已经使用java中的spark会话将表中的所有行加载到数据集中。我想得到每个月的行数。我尝试使用withcolumn()创建月份的新列,以便以后可以使用group\u by month和count()。但我无法从时间戳中获取月份。如何从上述数据集中找到每个月的计数?我的示例数据集如下所示,
8i9zcol21#
考虑到您解释问题的方式:我尝试使用withcolumn()创建月份的新列,以便以后可以使用group\u by month和count()。但我无法从时间戳中获取月份。您可以使用org.apache.spark.sql.functions包中提供的static 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,82,2019-05-07 07:24:14,0,105,2019-06-07 07:24:14,0,63,2019-04-07 07:24:14,0,7这将为您提供如下输出:+-----+-----+|月数|+-----+-----+| 6| 1|| 5| 1|| 4| 2|+-----+-----+希望这有帮助!!
myDataset.withColumn("month", month(col("date"))).groupBy(col("month")).count().show();
plupiseo2#
我相信你可以使用tuple2
Map<Date, Integer> = myDataSetRDD.map(x -> new Tuple2<Date, Integer>(x.getDate(), 1)) .reduceByKey((x, v) -> x + v) .collectAsMap();
这样,您就得到了一个Map,它以日期作为键,并将这些日期计数为值。我希望这有帮助
2条答案
按热度按时间8i9zcol21#
考虑到您解释问题的方式:我尝试使用withcolumn()创建月份的新列,以便以后可以使用group\u by month和count()。但我无法从时间戳中获取月份。
您可以使用org.apache.spark.sql.functions包中提供的static 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|
+-----+-----+
希望这有帮助!!
plupiseo2#
我相信你可以使用tuple2
这样,您就得到了一个Map,它以日期作为键,并将这些日期计数为值。我希望这有帮助