【问题标题】:Group spark Dataset by month from a timestamp in java从java中的时间戳按月分组火花数据集
【发布时间】:2019-02-07 12:05:38
【问题描述】:

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

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

我的示例数据集将如下所示,

【问题讨论】:

    标签: java apache-spark group-by apache-spark-dataset


    【解决方案1】:

    考虑到您解释问题的方式: 我尝试使用withColumn() 创建月份的新列,以便以后可以使用groupBy() 月份和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
    

    这将为您提供如下输出:

    +-----+-----+
    |month|count|
    +-----+-----+
    |    6|    1|
    |    5|    1|
    |    4|    2|
    +-----+-----+
    

    希望这会有所帮助!

    【讨论】:

      【解决方案2】:

      相信你可以使用Tuple2类型

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

      这样您最终会得到一张地图,其中日期作为键,这些日期的计数作为值。 希望对你有帮助

      【讨论】:

        猜你喜欢
        • 2014-05-31
        • 1970-01-01
        • 1970-01-01
        • 2017-11-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-30
        • 1970-01-01
        相关资源
        最近更新 更多