Spark 中的 rdd.map 函数在特定条件下可以没有 return 吗?

Can rdd.map function in Spark have no return in specific condition?

我有下面的代码

val c: RDD[(String, String)] = graph.triplets.map(
        triplet => {
            if (triplet.attr == "condition"){
                (triplet.srcAttr, triplet.dstAttr)
            }               
        }
    )

这会引发 type mismatch 错误

[error]  found   : Unit
[error]  required: (String, String)
[error]                 if (triplet.attr == "condition"){
[error]                 ^

我搜索这个错误,有一些答案说这个 if 表达式后面需要一个 else 否则编译器不知道 [=] 的显式 return 18=]函数

但是,我真的很困惑,因为我可以使用下面的各种代码并且没有问题

someRDD.map({           
        case (str, cnt) => (cnt)
    })

但是这个仍然没有明确的return而且它的表现和上面错误的非常相似,不是吗?

恕我直言,它们不一样。

第一个函数是partial one,也就是说有可能代码在不满足条件的时候会returnUnit。

另一方面,case 函数匹配所有你的 RDD 行(你明确定义了 RDD[string, string])。所以它不像第一个那样是偏函数。

 if (triplet.attr == "condition"){
                (triplet.srcAttr, triplet.dstAttr)
 }    

这个代码块没有return一个(String, String)类型,它实际上returnUnit因为else分支没有定义。