如何在 Spark 中绑定复杂结构数据帧中的变量



我有一个这样的代码截图:

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

最新更新