2016-04-01 29 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,所以我不不知道如何生成一個空的

相關問題