2017-09-16 47 views
1

這裏是一個示例代碼星火,其將SeqDataset如何Spark中隱含的工作/斯卡拉

import spark.implicits._ 
val s = Seq(1, 2, 3, 4) 
val ds = s.toDS() 

斯卡拉Seq沒有toDS方法,它來自星火implicits。數據集是如何創建的?

編輯:我看過其他的答案,但看不到一個例子,這將解釋如何隱式可以在s.toDS中使用。我引用了評論中的示例答案。

+0

@ user8371915我的確看到了答案https://stackoverflow.com/a/10375941/328989,但沒有注意到那裏提到了's.applyPrefix',只有'applyPrefix(s)',這是不清楚的對我來說,這裏是否可以覆蓋這個案例。 – Datageek

回答

2

Scala有一種方法可以將方法添加到現有類中,例如Kotlin中的擴展方法(和我記得的C#),但通過含蓄方式以不同方式進行。

的方法添加到現有類,首先創建隱類:

object StringImplicits { 
    implicit class StringUtils(s: String) { 
    def someCoolMethod = println("Yooo") 
    } 
} 

object Application extends App { 
    import StringImplicits._ 
    val s = "Hello" 
    s.someCoolMethod 
} 

導入此StringUtils,可以在String

注意StringUtils類的一個實例調用someCoolMethod需要String作爲constuctor PARAM。

當在String上調用某種方法時,scala編譯器首先在String類中查找此方法。

如果沒有找到它,它會查找導入的隱式類,它取參數String

如果找到,它會調用該類的方法。

如果找不到這樣的類,就會引發錯誤。