火花数据帧中滤波的多个条件

dhe*_*eee 27 apache-spark apache-spark-sql spark-dataframe

我有一个包含四个字段的数据框.其中一个字段名称是Status,我试图在.filter中使用OR条件来表示数据帧.我试过下面的查询,但没有运气.

df2 = df1.filter(("Status=2") || ("Status =3"))

df2 = df1.filter("Status=2" || "Status =3")
Run Code Online (Sandbox Code Playgroud)

有没有人以前用过这个.我在这里看到了关于堆栈溢出的类似问题.他们使用下面的代码来使用OR条件.但该代码适用于pyspark.

from pyspark.sql.functions import col 

numeric_filtered = df.where(
(col('LOW')    != 'null') | 
(col('NORMAL') != 'null') |
(col('HIGH')   != 'null'))
numeric_filtered.show()
Run Code Online (Sandbox Code Playgroud)

Dav*_*fin 40

代替:

df2 = df1.filter("Status=2" || "Status =3")
Run Code Online (Sandbox Code Playgroud)

尝试:

df2 = df1.filter($"Status" === 2 || $"Status" === 3)
Run Code Online (Sandbox Code Playgroud)

  • `===`的反义词是`=!=` (5认同)
  • 取决于版本 - 对于2.0之前的版本,使用`!==`但是在版本2.0.0之后`!==`与`===`没有相同的优先级,请使用`=!=`代替 (3认同)
  • 您可以在当前的之后添加另一个.filter.df.filter(df.col( "名称").equalTo( "约翰")).过滤器(df.col( "名称").equalTo( "添")) (2认同)
  • @DavidSchuler这些链接的过滤器是否在Spark Analyzer中合并到单个工作阶段中? (2认同)

Ami*_*min 9

已经回答了这个问题,但是为了将来参考,我想提到,在这个问题的上下文中,Dataset / Dataframe中的whereand filter方法支持两种语法:SQL字符串参数:

df2 = df1.filter(("Status = 2 or Status = 3"))
Run Code Online (Sandbox Code Playgroud)

和基于Col的参数(由@David提及):

df2 = df1.filter($"Status" === 2 || $"Status" === 3)
Run Code Online (Sandbox Code Playgroud)

看来OP结合了这两种语法。就个人而言,我更喜欢第一种语法,因为它更简洁,更通用。