Scala 基于列表中定义的列在数据帧上进行筛选

Scala 基于列表中定义的列在数据帧上进行筛选,scala,spark-dataframe,Scala,Spark Dataframe,我有一个数据帧- df 我已将列表定义为targetList List(T1_diff, T2_diff) 我想过滤掉数据帧中T1_diff和T2_diff大于3的所有行。在这种情况下,输出应该只包含第二行,因为第一行包含-5作为T1_Diff。targetList可以包含更多列,当前它有T1_Diff,T2_Diff,如果有另一个列称为T3_Diff,那么应该自动处理。 实现这一点的最佳方法是什么?假设您有以下列,您希望筛选出大于3的值 val lst = List("T1_diff", "

我有一个数据帧- df

我已将列表定义为targetList

List(T1_diff, T2_diff)
我想过滤掉数据帧中T1_diff和T2_diff大于3的所有行。在这种情况下,输出应该只包含第二行,因为第一行包含-5作为T1_Diff。targetList可以包含更多列,当前它有T1_Diff,T2_Diff,如果有另一个列称为T3_Diff,那么应该自动处理。
实现这一点的最佳方法是什么?

假设您有以下
列,您希望筛选出大于3的值

val lst = List("T1_diff", "T2_diff")
然后,您可以使用这些列名创建一个
字符串
,然后将该
字符串
传递给
where
函数

val condition = lst.map(c => s"$c>3").mkString(" AND ")
df.where(condition).show(false)
对于上面的数据帧,它将只输出第二行

+----------+----+----+-------+-------+
|Week      |Dim1|Dim2|T1_diff|T2_diff|
+----------+----+----+-------+-------+
|2016-04-30|14  |FR  |90     |4      |
+----------+----+----+-------+-------+
如果您有另一列,比如说
T3_diff
,您可以将其添加到
列表中
,它将被添加到过滤条件中

+----------+----+----+-------+-------+
|Week      |Dim1|Dim2|T1_diff|T2_diff|
+----------+----+----+-------+-------+
|2016-04-30|14  |FR  |90     |4      |
+----------+----+----+-------+-------+