根据列表中定义的列过滤数据框

时间:2018-04-24 18:37:11

标签: scala spark-dataframe

我有一个数据框 - DF

+----------+----+----+-------+-------+
|      WEEK|DIM1|DIM2|T1_diff|T2_diff|
+----------+----+----+-------+-------+
|2016-04-02|  14|NULL|     -5|     60|
|2016-04-30|  14|  FR|     90|      4|
+----------+----+----+-------+-------+

我已将列表定义为targetList

List(T1_diff, T2_diff)

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

1 个答案:

答案 0 :(得分:0)

假设您有以下List个列要过滤掉大于3的值。

val lst = List("T1_diff", "T2_diff")

然后,您可以使用这些列名创建String,然后将String传递给where函数。

val condition = lst.map(c => s"$c>3").mkString(" AND ")
df.where(condition).show(false)

对于上面的Dataframe,它只会输出第二行。

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

如果您有其他专栏说T3_diff,则可以将其添加到List,并将其添加到过滤条件中。