【发布时间】:2015-10-22 00:23:39
【问题描述】:
我已经学习 Spark 几个星期了,目前我正在尝试根据他们在 Scala 中使用 Spark 和 Hadoop 的连接对几个项目或人员进行分组。例如,我想看看足球运动员是如何根据他们的俱乐部历史联系起来的。我的“玩家” rdd 将是:
(John, FC Sion)
(Mike, FC Sion)
(Bobby, PSV Eindhoven)
(Hans, FC Sion)
我想要这样的rdd:
(John, <Mike, Hans>)
(Mike, <John, Hans>)
(Bobby, <>)
(Hans, <Mike, John>)
我打算用地图来完成这个。
val splitClubs = players.map(player=> (player._1, parseTeammates(player._2, players)))
其中 parseTeamates 是一个函数,它可以找到同时为同一俱乐部效力的球员(球员._2)
// RDD is not a type, how can I insert rdd into a function?
def parseTeammates(club: String, rdd: RDD) : List[String] = {
// will generate a list of players that contains same "club" value
val playerList = rdd.filter(_._1 == club)
return playerList.values;
}
我收到编译错误,类型不匹配,因为函数应该返回 List[String],但 playerList.values 返回 org.apache.spark.rdd.RDD[List[String]]。任何人都可以帮助我以简单的形式(在我的例子中为 List[String])获取 RDD 的值吗?
另外,我认为有一种更优雅的方式来解决这个问题,而不是创建一个单独的 RDD,然后在新的 RDD 中找到某个键,然后将值作为列表返回
【问题讨论】:
-
社区检测算法有好几种。在这里讨论它们太长了,完全超出了 SO 的范围。你想关注什么?您尝试实现的算法是什么?
-
我正在尝试使用 map 和 reduce 与 Spark 和 Hadoop 以 Scala 语言实现它
-
算法是什么? Map reduce 不是一种算法,它是一种源自函数式编程的编程范式。
-
你能添加你想要实现的伪代码吗?您的描述质量低下,听起来好像您在要求我们为您做作业。
-
我更改了我的代码,现在它包含了我正在尝试实现的代码
标签: scala apache-spark key-value keyvaluepair