簡體   English   中英

Spark中的scala匿名function中的代碼塊是什么意思?

[英]What does code block mean in a scala anonymous function in Spark?

我是 scala 的新手,不明白匿名 function 中的代碼塊是什么意思。 這是一些示例代碼:

def makeIndex(langs: List[String], rdd: RDD[WikipediaArticle]): RDD[(String, Iterable[WikipediaArticle])] = {
    val articles_Languages = rdd.flatMap(article => {
        langs.filter(lang => article.mentionsLanguage(lang))
                                    .map(lang => (lang, article))
    })
    articles_Languages.groupByKey
}

這是否意味着將WikipediaArticle object 從其原始轉換為元組列表(lang,article) ,然后進行扁平化,並通過調用 groupByKey 將其轉換為RDD[(String, Iterable[WikipediaArticle])]

這是否意味着我可以在{}塊內寫入任何代碼,只要塊內的最后一行返回我想要的langs ?以這種方式在每篇文章上迭代代碼示例代碼?

mapflatMap高階函數,它們接收 function 作為參數,您可以通過多種方式調用它們。 你可以只傳遞一個你定義的方法,一個匿名的 function 如果它只有一行,則在()內傳遞,如果你需要更多代碼行,則在{}內傳遞。

是的,如果你遵循所需的簽名,你可以傳遞任何你想要的東西,這意味着輸入和 output 必須與簽名匹配。

如果是map你有一個簽名A => B所以你可以將你的A轉換成你想要的任何東西

例如對於 Int 的 RDD:

 rdd.map(x=> x+1) 

x => x+1 是anonymous function 由map或其他方法調用。

在這種情況下,Int 的 output 由 Scala 推斷,而不是使用帶輸入和 output 定義的 def。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM