2016-04-01 28 views
1

我有了的RDD明确的返回类型的斯卡拉函数返回:做什么,如果没有在Scala的功能

def myfunction(x:Int):RDD = { 
    if (x==1) { 
    formRDD() 
    } else { 

    } 
} 

我不知道该怎么做别的,如果我不想要形成一个空的RDD。

+1

如果你想在这里不是很相关。想象一下,如果你想返回一个字符串,而函数被声明为返回RDD ......那么呢? – Dima

回答

7

如果您的功能可以返回RRD或返回“无”,它应该返回Option[RRD]。在你的分支你要么返回Some(r)None

Read about Option

+0

这听起来不错,非常感谢。 –

4

实际上返回一个空的RDD是一个有效的解决方案。当封闭类型是一个集合时,我不喜欢返回Option。 “空”在集合中完美定义,因此Option是多余的。

// assuming you have sc in scope 
def myfunction(x:Int): RDD[Int] = 
    if (x == 1) formRDD() else sc.emptyRDD[Int] 

如果你不得不回到一个定期收集,你会同样做到这一点:

def myfunction(x:Int): Seq[Int] = 
    if (x == 1) Seq(1,2,3) else Seq.empty[Int] 

def myfunction(x:Int): Option[Seq[Int]] = ...将是一个有点浪费。

+0

如果一个空集合不能成为第一个分支的有效结果,那么在第二个分支中返回一个空集合是非常好的。 – 9000

+0

我明白你的意思了。如果您想区分来自'formRDD()'的空集合和来自'x!= 1'的空集合。是的,如果这是你关心的事情,那么返回一个'Option [RDD [_]]'是有道理的。 – marios

+0

嘿@马里奥斯,谢谢,我想你的答案是我最初想要的。 @ 9000的解释对我也很有帮助。多谢你们。 –

0

恕我直言,你应该返回一个Option,以便你清楚地表明这种方法可能没有RDD返回。在调用此方法的方法中,您需要照顾None的情况,可能是.getOrElse(RDD.empty)

虽然有些人可能会说这种方法可能是浪费的,但这是一个关注点分离的问题。当然,如果你正在做一个10行的脚本,你不需要担心返回一个Option,你可以简单地返回空RDD

注:我注意到熟悉RDD,所以我不不知道如何生成一个空的

相关问题