2017-04-16 124 views
-3

我正在尋找在RDD文本文件說一句話「斯卡拉」:星火斯卡拉問題

myRdd.map(line => if (line.split(" ").contain("Scala")) {("Scala", 1)}) 

工作正常。

但是:

val l = "Scala" 
myRdd.map(line => if (line.split(" ").contain(l)) {(l, 1)}) 

不行的,它凍結程序沒有錯誤。

這似乎是因爲一個局部變量,但不知道爲什麼。

+0

[由參數名稱替換形而下值時階無限循環(的可能的複製http://stackoverflow.com/questions/41983586/scala-infinite-loop-when-replacing- concret-value-by-parameter-name) –

回答

0

感謝碧玉-M,

final val lang_i 

工作就好了。但我非常驚訝,至少從我所做的所有搜索中,這一點並不爲人所知。

我想其實做類似如下(不知道語法),它不工作:

final val langs = List("Java", "Scala", "Python") 
wikiRdd.flatMap(wa => langs.map(lang => if(wa.split(" ").contain(lang)) {(lang, 1)})) 

但最終簡化版,似乎一個列表工作。我會更仔細地看看所提供的鏈接,但直接的回答可以緩解我的痛苦。

同樣對不起,我的無知,但我也有興趣也在「斯卡拉」的答案,我不明白我們如何可以重構或編寫代碼,而不需要在lambda表達式中傳遞變量。我仍在學習...但我很好奇看看這個列表示例如何解決。

非常感謝, 的Ez

+0

我在其他答案中增加了一些信息。 –