小编Dar*_*ows的帖子

在列表中定义的列上过滤数据框

我有一个数据框 df

+----------+----+----+----+---+---+----+---+---+-------+-------+
|      WEEK|DIM1|DIM2|  T1| T2| T3|  T1| T2| T3|T1_diff|T2_diff|
+----------+----+----+----+---+---+----+---+---+-------+-------+
|2016-04-02|  14|NULL|9874|880| 23|9879|820| 45|     -5|     60|
|2016-04-30|  14|  FR|9875| 13| 34|9785|  9| 67|     90|      4|
+----------+----+----+----+---+---+----+---+---+-------+-------+
Run Code Online (Sandbox Code Playgroud)

我想在这个数据框上做两件事:

  1. 仅选择 WEEK、DIM1、DIM2、T1_diff、T2_diff
  2. 过滤器 T1_diff 或 T2_diff > 3

我目前正在这样做 -

val selectColumns = Seq("WEEK", "DIM1", "DIM2","T1_diff","T2_diff")
df.select(selectColumns.head, selectColumns.tail: _*).filter($"T1_diff" > 3 or $"T2_diff" > 3).show()
Run Code Online (Sandbox Code Playgroud)

我有一个用例,我的 targetColumns 定义如下 -

val targetColumns = Seq("T1_diff", "T2_diff")
Run Code Online (Sandbox Code Playgroud)

我需要使用上述序列将其应用到过滤器中。这是按顺序排列的,因为可以在 targetColumns 列表中添加更多列。我试过这样的事情 -

df.filter(r => !targetColumns.map(x => col(x) > 3).isEmpty).show()
Run Code Online (Sandbox Code Playgroud)

这似乎不起作用。谁能告诉我这样做的最佳方法是什么?

scala dataframe apache-spark apache-spark-sql

0
推荐指数
1
解决办法
1310
查看次数

标签 统计

apache-spark ×1

apache-spark-sql ×1

dataframe ×1

scala ×1