在spark中,通过组合其他对象来构建对象RDD的最佳方法是什么?

时间:2017-05-22 14:08:02

标签: apache-spark rdd

实施例。我有(RoomId(键),RoomData对象(值))的RDD和(RoomId(键),StudentData对象(值))的RDD。

我希望最终得到一个对象(值)的RoomId(key)的RDD,该对象包含该房间数据中的房间和学生。

在mapreduce中我会:

  • 拉取房间和学生的所有数据
  • 使用对象所属RoomId的组合键和“a”或 “b”(RoomId + a)forRoomData对象和(RoomId + b)StudentData 对象在reducer中
  • 我可以指望订单并将第一个对象作为RoomData
    该RoomId的对象并添加其余值,如
    学生,使用RoomData.addStudent()到RoomData对象 方法
  • 然后输出最终的RoomData对象。

但是火花:

我想过可能将两个RDD连接或附加在一起,然后通过密钥聚合新的RDD可以工作,如果我创建了一些uber会议室域对象,它将在聚合方法中创建并保存RoomData和给定RoomId的StudentData,但我认为有更好的方法。

我可以向RoomData对象添加一个addStudent方法,该方法将获取StudentData对象并将该数据添加到RoomData对象,实际上这就是我想要做的。但是,我应该如何/将它们以火花的方式与RDD相结合?

示例数据

1号房间 roomID - 100 主题 - 法语 老师 - SchoolLady女士 时间 - 中午12:00。

2号房间 roomID - 101 主题 - 西班牙语 老师 - LadyAtSchool女士 时间 - 凌晨1点

学生1 roomID - 101 名字 - 鲍勃史密斯

学生2 roomID - 100 名字 - 瑞安强人

学生3 roomID - 100 名字 - 简史密斯

在RDD学生房间的房间RDD学生,不能改变原始的RDD。

希望结果是包含以下内容的RDD:

1号房间 roomID - 100 主题 - 法语 老师 - SchoolLady女士 时间 - 中午12:00 学生 - 瑞安斯特朗,简史密斯

2号房间 roomID - 101 主题 - 西班牙语 老师 - LadyAtSchool女士 时间 - 凌晨1点 学生 - 鲍勃史密斯

0 个答案:

没有答案