2017-02-23 8 views
0

で$いくつかの文字列の出力は、私が火花やスカラ座での作業やオンラインドキュメントに次はScalaの

df.select($"name", $"age" + 1).show() 

を見ていているもの$「の名前は、」ここで何を意味するのでしょうか?

+0

http://docs.scala-lang.org/overviews/core/string-interpolation.html –

+0

この質問は重複しない、${}を持っていますもう一方の – puhlen

+0

彼らは文字通り '$'シンボルが何をしているのかを尋ねていますし、SparkメソッドではなくScalaの構文であると誤解しています。 –

答えて

3

これはスカラではありません。

むしろ火花のことは、represent a columnと思われます。

implicit class StringToColumn(val sc: StringContext) { 
    def $(args: Any*): ColumnName = { 
     new ColumnName(sc.s(args: _*)) 
    } 
    } 

あなたはあまりにもdataframe.select("columnname").showまたはdataframe.select(col("columnname")).showを行うことができ、ここでは上org.apache.spark.sql.SQLImplicitsコードを参照してください、しかし、あなたはあなたの例では、年齢を増加しているようdataframe.select($"columnname")は、列の値を変異させます。

例えば、

だから、
dataframe.filter($"age" > 28).show() 

、基本的に、あなたがそれ(タイプColumnの)変数作っている$を使用するには、データフレームを考える

+----+-------+ 
| age| name| 
+----+-------+ 
|null|Michael| 
| 30| Andy| 
| 19| Justin| 
+----+-------+ 

scala> dataframe.select($"name".as('myname)).show() 
+-------+ 
| myname| 
+-------+ 
|Michael| 
| Andy| 
| Justin| 
+-------+ 

scala> dataframe.select("age"+1).show() 
org.apache.spark.sql.AnalysisException: cannot resolve '`age1`' given input columns: [age, name];; 
'Project ['age1] 

他の例では、列の値に基づいてフィルタすることができSparkの$""となります。

変数を連結しながら、Scalaは(別名String interpolation

scala> val printMe = "prayagupd" 
printMe: String = prayagupd 

scala> println(s"value = $printMe") 
value = prayagupd 
+1

素敵な説明です。どうもありがとうございます – user373201