【发布时间】:2017-07-10 17:09:24
【问题描述】:
我需要从另一个配对的 RDD 生成配对的 RDD。基本上,我正在尝试编写一个执行以下操作的地图函数。
RDD[Polygon,HashSet[Point]] => RDD[Polygon,Integer]
这是我写的代码:
迭代 HashSet 并从“Point”对象中累加一个值的 Scala 函数。
def outCountPerCell( jr: Tuple2[Polygon,HashSet[Point]] ) : Tuple2[Polygon,Integer] = {
val setIter = jr._2.iterator()
var outageCnt: Int = 0
while(setIter.hasNext()) {
outageCnt += setIter.next().getCoordinate().getOrdinate(2).toInt
}
return Tuple2(jr._1,Integer.valueOf(outageCnt))
}
在配对的 RDD 上应用该函数,这会引发错误:
scala> val mappedJoinResult = joinResult.map((t: Tuple2[Polygon,HashSet[Point]]) => outCountPerCell(t))
<console>:82: error: type mismatch;
found : ((com.vividsolutions.jts.geom.Polygon, java.util.HashSet[com.vividsolutions.jts.geom.Point])) => (com.vividsolutions.jts.geom.Polygon, Integer)
required: org.apache.spark.api.java.function.Function[(com.vividsolutions.jts.geom.Polygon, java.util.HashSet[com.vividsolutions.jts.geom.Point]),?]
val mappedJoinResult = joinResult.map((t: Tuple2[Polygon,HashSet[Point]]) => outCountPerCell(t))
有人可以看看我缺少什么,或者分享任何在 map() 操作中使用自定义函数的示例代码。
【问题讨论】:
标签: scala apache-spark