如何在spark java中使用函数和()和()对spark布尔表达式进行分组

如何在spark java中使用函数和()和()对spark布尔表达式进行分组,java,apache-spark,Java,Apache Spark,比方说,我在一个数据集上有一些过滤条件,如下所示 ((col1和&col2)| | col3) 或 (col1&&(col2|col3)) 如何在javasparkapi和以及或中表达这一点 我的问题是如何使用Column.and和Column.or函数对表达式进行分组通过在col()方法中将列的名称字符串指定为参数,您可以轻松地使用filter进行此类筛选 因此,对于以下具有三列的输入数据帧df1,second,third: +-----+------+-----+ |first|second

比方说,我在一个数据集上有一些过滤条件,如下所示

((col1和&col2)| | col3)

(col1&&(col2|col3))

如何在javasparkapi以及中表达这一点


我的问题是如何使用Column.and和Column.or函数对表达式进行分组

通过在
col()
方法中将列的名称字符串指定为参数,您可以轻松地使用
filter
进行此类筛选

因此,对于以下具有三列的输入数据帧
df1
second
third

+-----+------+-----+
|first|second|third|
+-----+------+-----+
| true|  true| true|
| true|  true|false|
| true| false|false|
| true| false| true|
+-----+------+-----+
您可以使用以下内容:

// Java
df1.filter(col("first").and(col("second")).or(col("third")))

// Scala
df1.filter((col("first") && col("second")) || col("third"))
df1.filter(col("col2").or(col("col3")).and(col("col1")))
并成功筛选出第三行,如下面的输出所示:

+-----+------+-----+
|first|second|third|
+-----+------+-----+
| true|  true| true|
| true|  true|false|
| true| false| true|
+-----+------+-----+
在备用逻辑表达式的相同波长中,您可以使用如下内容:

// Java
df1.filter(col("first").and(col("second")).or(col("third")))

// Scala
df1.filter((col("first") && col("second")) || col("third"))
df1.filter(col("col2").or(col("col3")).and(col("col1")))

嘿,库索尔。我的问题是针对java过滤器api的。filter函数接受类型为“Column”的参数。而且您不能在java中执行Column&&Column。编译器抛出错误,说明类型列不支持&&操作。您可以使用
df1.filter(col(“first”)和(col(“second”)。或(col(“third”))
我的答案的一部分,您不必在代码中同时使用这两个选项。我只是提出了Java和Scala Language的解决方案,以防将来有人来到这里,需要其中一个用于他们的程序。如果我需要的布尔表达式是(col1&&(col2 | | col3)),Java表达式会是什么?我更新了您的备选逻辑表达式的答案是,我的观点是,我们必须对表达式进行重新排序,使最里面的布尔表达式。(应该得到计算的表达式)在用java编写时应该是最左边的,不像在scala或python中,我们可以应用括号来指定计算顺序