使用Spark Scala根据数据框中的复杂条件过滤行

时间:2019-03-20 09:45:25

标签: scala apache-spark

我必须根据用户输入的某些条件从数据框中过滤行。我读取了一个csv文件,以字符串的形式获取每个条件。然后,使用下面的代码进行过滤。

dataframe.filter(expr(condition))

这适用于不包含“&”,“ |”的简单条件。例如:“ col1!= 0”,“ col2> 2”。

现在的要求是使其也能在复杂条件下工作。

以下是一个示例

数据框

col1 | col2 | col3 | col4 -----+------+------+------ 1.0 | 10 | 100 | x 0.2 | 20 | 200 | y 1.3 | 30 | 300 | x

复杂条件:“(col1 <1.0)&(col2 + col3)> = 200)&(col4!='x')”

有办法吗?

1 个答案:

答案 0 :(得分:1)

您可以将&|转换为andor。如果复杂的条件被深层嵌套,则可以递归进行。

以下是Spark SQL函数的列表供您参考:

https://docs.databricks.com/spark/latest/spark-sql/language-manual/functions.html