我遇到一个火花作业,并将错误消息作为空集合退出。
java.lang.UnsupportedOperationException: empty collection
我已经放大了两行导致了这个问题。
sum_attribute1 = inputRDD.map(_.attribute1).reduce(_+_)
sum_attribute2 = inputRDD.map(_.attribute2).reduce(_+_)`
.map和.distinct.count的其他行很好。 我想打印出inputRDD.map(attribute1)和inputRDD.map(_。attribute2)来查看reduce之前的map。
我以为我可以定义类似
的内容sum_attribute1 = inputRDD.map(_.attribute1)
但是当我尝试编译代码时,它显示错误:
[error] found : org.apache.spark.rdd.RDD[Int]
[error] required: Long
[error] sum_attribute1 = inputRDD.map(_.attribute1)
[error] ^
我的attribute1被定义为Int但是当我尝试将其定义为Long时,它给了我另一个错误。
我是朝着正确的方向前进的吗? 如何在地图之后和减少之前打印数据? 空集合可能存在什么问题? _.attribute1和reduce(_ + _)中的下划线是什么意思?
答案 0 :(得分:1)
我不认为你正朝着正确的方向前进,我会专注于下面的元素:
我建议您先学习一点scala。对于您的一个具体问题,请阅读about that usage of _。
对于你的另一个问题,reduce
不能用于空集合,我建议使用fold
,因为它支持空集合。