请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

groupBy和keyBy的key选择器不一样吗?

  case class Student(name: String, age: Int,teacher:Teacher)
  case class Teacher(name:String,room:(Int,Int,Int),salary:Int)

  def main(args: Array[String]): Unit = {
    val teacher = Teacher("teacher-w",(1,2,3),99)
    val students = List(Student("a",11,teacher),Student("b",22,teacher))
    val benv = ExecutionEnvironment.getExecutionEnvironment
    benv.fromElements(students:_*).groupBy("name").sum("teacher.salary").print()
  }

以上这段代码会报错:

Fields 'teacher.salary' are not valid for 'com.lx.list.List1$Student(name: String, age: Integer, teacher: com.lx.list.List1$Teacher(name: String, room: scala.Tuple3(_1: Integer, _2: Integer, _3: Integer), salary: Integer))'.

但是如果把groupBy换成keyBy就可以执行了。请问这是什么原因?

正在回答 回答被采纳积分+3

1回答

Michael_PK 2021-02-25 23:07:11

这个错误信息是,sum的这个api里面不支持teacher.salary这种写法,所以这么写不会报错

0 回复 有任何疑惑可以回复我~
  • 提问者 Amourxxxx #1
    老师,啥叫这么写不会报错啊-=。
    我的问题是,这个写法groupby sum不支持,但是keyby sum 就支持,
    但是老师的视频和官网里,都没找到相关groupby keyby的区别。
    回复 有任何疑惑可以回复我~ 2021-02-25 23:18:56
  • 提问者 Amourxxxx #2
    所以,在我的认知里,后面处理逻辑相同,如果从流换成批,就改成group by,如果从批换成流,就用keyby,但是现在看来,这两个算子的用户貌似还有些区别和不同,不能简单的仅仅改变groupby or keyby
    回复 有任何疑惑可以回复我~ 2021-02-25 23:20:11
  • Michael_PK 回复 提问者 Amourxxxx #3
    datasteam中是使用keyby的,dataset中是groupby的吧
    回复 有任何疑惑可以回复我~ 2021-02-25 23:22:29
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号