1)错误代码如下:
//distinctsubject是对应学科名的rdd数组。
val distinctsubject: RDD[String] =allsubject.distinct()
//这个思路是将rdd中的字符串取出来,一个个用作筛选分组。
distinctsubject.foreach(dsbj=>{
//逐个筛选出每个学科对应老师的数据(take是一个action,会触发任务提交)
val filtered: RDD[((String, String), Int)] =reduced.filter(_._1._1==dsbj)
//可以调用rdd的sortBy方法,内存+磁盘进行排序
val sorted: Array[((String, String), Int)] =filtered.sortBy(_._2).take(topN)
println(dsbj+":"+sorted)
})
错误原因:
rdd并不真正存储数据,根据官方文档:transformation和action只能由driver调动,一个transformation和action不能写在另一个transformation和action里面。因此若要通过循环运行一系列rdd操作,条件栏中需要是集合,而不是rdd。
如果需要将rdd转换成集合数组,只需要通过collect手机结果赋值给数组变量即可。
实际上,rdd的一系列转换操作