2017-02-23 60 views
0

一些字符串我有火花和Scala工作,看到在在線文檔

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

下面是什麼$「名」的意思是在這裏嗎?

+0

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

+0

這個問題是不是重複另一個。 – puhlen

+0

他們都在問''''符號的作用,並且_both_會誤解它是Scala語法而不是Spark方法。 –

回答

3

這不是一個斯卡拉的事情。

scala> val name = "something" 
name: String = something 

scala> println($"name") 
<console>:12: error: value $ is not a member of StringContext 
     println($"name") 
      ^

寧可火花的事情,這似乎represent a column

org.apache.spark.sql.SQLImplicits代碼在這裏,

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

你可以簡單地做dataframe.select("columnname").showdataframe.select(col("columnname")).show過,但dataframe.select($"columnname")變異的列值,就像你在你的例子遞增的年齡。

例如。

給出一個數據幀,

+----+-------+ 
| 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] 

其他例如使用$可以基於列的值是過濾器,

dataframe.filter($"age" > 28).show() 

所以,基本上,你這是它(Column類型)的變量與Spark中的$""

Scala有${}而串聯變量,(又名String interpolation

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

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

高超的解釋。非常感謝 – user373201