pyspark中的异或逻辑条件

pyspark中的异或逻辑条件,pyspark,apache-spark-sql,Pyspark,Apache Spark Sql,pyspark中是否有逻辑XOR表达式? 文档中说要使用^,但当我尝试这样做时,出现了以下错误 该链接中没有任何内容说明您应该使用^,而壁橱中出现的内容似乎是: >>> from pyspark.sql import Row >>> df = spark.createDataFrame([Row(a=170, b=75)]) >>> df.select(df.a.bitwiseXOR(df.b)).collect() [Row((a ^ b)

pyspark中是否有逻辑XOR表达式?
文档中说要使用
^
,但当我尝试这样做时,出现了以下错误

该链接中没有任何内容说明您应该使用
^
,而壁橱中出现的内容似乎是:

>>> from pyspark.sql import Row
>>> df = spark.createDataFrame([Row(a=170, b=75)])
>>> df.select(df.a.bitwiseXOR(df.b)).collect()
[Row((a ^ b)=225)]
其他出现的
^
同时用于正则表达式和指数,因此不相关

这个特殊的案例显示了一个带有
^
字符的结果,但它告诉您要使用
bitwiseXOR()
。然而,按位运算和逻辑or运算之间有很大的区别(当然,除非在将二者合并的环境中仅对0和1的位值执行)


而且,考虑到该页面上仅出现的“logical”与逻辑运算符无关,因此该操作似乎不可用。

该链接中没有任何内容说明您应该使用
^
,因此出现的内容似乎是:

>>> from pyspark.sql import Row
>>> df = spark.createDataFrame([Row(a=170, b=75)])
>>> df.select(df.a.bitwiseXOR(df.b)).collect()
[Row((a ^ b)=225)]
其他出现的
^
同时用于正则表达式和指数,因此不相关

这个特殊的案例显示了一个带有
^
字符的结果,但它告诉您要使用
bitwiseXOR()
。然而,按位运算和逻辑or运算之间有很大的区别(当然,除非在将二者合并的环境中仅对0和1的位值执行)


而且,鉴于该页上仅出现的“logical”与逻辑运算符无关,该操作似乎不可用。
pyspark.sql.column.column
对象上的布尔操作允许您使用
&
|
~
。正如您所看到的,不幸的是,XOR操作不在已定义的操作中

因此:

df=spark.范围(1000)
df.where((df.id>=20)和(df.id=20)^(df.id=10).cast('int'))\

.bitwiseXOR((df.id=20)^(df.id对
pyspark.sql.column.column
对象的布尔操作,允许您使用
&
~
进行定义。正如您所看到的,不幸的是,异或操作不在定义的对象中

因此:

df=spark.范围(1000)
df.where((df.id>=20)和(df.id=20)^(df.id=10).cast('int'))\

.bitwiseXOR((df.id=20)^(df.id Err,你看了你提供的链接的第273行了吗?是的,我看了。我想你指的是第287行,它定义了
bitwiseXOR
。第273行包含文档字符串定义。这是我指的文档字符串,因为它比试图破译代码要好:-)好的,这是一个整数运算,不是布尔运算。另外,这不是一个可以与运算符表示法一起使用的东西,我知道问题是关于:)。谢谢你的解释。我意识到我不能互换使用位运算符和逻辑运算符。我已经求助于使用
~
类似的:
df.where((df.id>=20)|(df.id=20)&(df.id-Err,你看了你提供的链接的第273行了吗?是的,我看了。我想你指的是第287行,它定义了
bitwiseXOR
。第273行包含文档字符串定义。这是我指的文档字符串,因为它比试图破译代码要好:-)好的,这是一个整数运算,不是布尔运算。另外,这不是一个可以与运算符表示法一起使用的东西,我知道问题是关于:)。谢谢你的解释。我意识到我不能互换使用位运算符和逻辑运算符。我已经求助于使用
~
类似的:
df.where((df.id>=20)|(df.id=20)和(df.id可能需要添加
位异或
不能直接作用于逻辑类型-您需要将两个操作数强制转换为整数,然后将结果强制转换回
布尔
。可能需要添加
位异或
不能直接作用于逻辑类型-您需要将两个操作数强制转换为整数,然后强制转换为re。)返回到
布尔值
df.where((df.id >= 10).cast('int')\
        .bitwiseXOR((df.id <= 90).cast('int')).cast('boolean')).show()
import pyspark
df = spark.range(50)
pyspark.sql.column.Column.__xor__ = lambda x, y: x.cast('int').bitwiseXOR(y.cast('int')).cast('boolean')
df.where((df.id >= 10) ^ (df.id <= 40)).show()