2017-07-27 27 views
0

我有一个代码片段是这样的:如何绑定复杂结构dataframes变量火花

val filteredDF = df.filter($"abc.color".equalTo("yellow") && $"abc.height".equalTo("5")).toDF() 

复杂的结构是这样的:

{ 
    abc:{ 
     color: yellow, 
     height:5 
    } 
} 

我想是要创建一个变量代表ABC,说

val table_name = "abc" 

,创造色彩和高度变量以及,说

val colorField = "color" 
val heightField = "height" 

那么我该如何修改上面的代码来使用这些新的变量?

我尝试了一些办法像

df.filter(${table_name+"."+colorField}.equalTo("yellow") 

df.filter(($""+table_name+"."+colorField).equalTo("yellow") 

但无论是作品。

回答

1

您可以使用Scala的String Interpolation

val table_name = "abc" 
val colorField = "color" 
val heightField = "height" 

df.show 
+----------+ 
|  abc| 
+----------+ 
|[yellow,5]| 
+----------+ 

import org.apache.spark.sql.functions.col 

df.filter(col(s"${table_name}.${colorField}").equalTo("yellow")).show 

+----------+ 
|  abc| 
+----------+ 
|[yellow,5]| 
+----------+ 

df.filter(col(s"${table_name}.${colorField}").equalTo("green")).show 
+---+ 
|abc| 
+---+ 
+---+ 
+1

你的答案是如此的帮助!谢谢!!! – teddy