我有一个像这样的代码snippit:
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")
但两者都不起作用。
答案 0 :(得分: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|
+---+
+---+