加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala引发了如何获得最新一天的记录

发布时间:2020-12-16 18:18:49 所属栏目:安全 来源:网络整理
导读:data="""user date item1 item21 2015-12-01 14 5.61 2015-12-01 10 0.61 2015-12-02 8 9.41 2015-12-02 90 1.32 2015-12-01 30 0.32 2015-12-01 89 1.22 2015-12-30 70 1.92 2015-12-31 20 2.53 2015-12-01 19 9.33 2015-12-01 40 2.33 2015-12-02 13 1.43
data=
"""
user date      item1 item2
1    2015-12-01 14  5.6
1    2015-12-01 10  0.6
1    2015-12-02 8   9.4
1    2015-12-02 90  1.3
2    2015-12-01 30  0.3
2    2015-12-01 89  1.2
2    2015-12-30 70  1.9
2    2015-12-31 20  2.5
3    2015-12-01 19  9.3
3    2015-12-01 40  2.3
3    2015-12-02 13  1.4
3    2015-12-02 50  1.0
3    2015-12-02 19  7.8
"""

如果我有上面的数据,我怎样才能得到每个用户的最新一天的记录?
我试着使用groupByKey,但不知道.

val user = data.map{
case(user,date,item1,item2)=>((user,date),Array(item1,item2))
}.groupByKey()

然后我不知道如何处理它.谁能给我一些建议?非常感谢:)

更新:

我改变了我的数据,现在用户在最近一天有几条记录,我希望得到所有这些记录.谢谢:)

第二次更新:

我想得到的结果是:

user1 (2015-12-02,Array(8,9.4),Array(90,1.3))
user2 (2015-12-31,Array(20,2.5))
user3 (2015-12-02,Array(13,1.4),Array(50,1.0),Array(19,7,8))

现在我写了一些代码:

val data2=data.trim.split("n").map(_split("s+")).map{
f=>{(f(0),ArrayBuffer(
                    f(1),f(2).toInt,f(3).toDouble)
    )}
}
val data3 = sc.parallelize(data2)
data3.reduceByKey((x,y)=>
             if(x(0).toString.compareTo(y(0).toString)>=0) x++=y
                  else y).foreach(println)

结果是:

(2,ArrayBuffer(2015-12-31,20,2.5))
(1,ArrayBuffer(2015-12-02,8,9.4,2015-12-02,90,1.3))
(3,13,1.4,50,1.0,19,7.8))

有什么可以改善它吗?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读