我有一个这样的代码截图:
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")
但两者都不起作用。
您可以使用 Scala 的字符串插值
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|
+---+
+---+