You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PySpark中如何通过二进制位运算提取指定位置的比特值

问题说明

初始参考代码如下:

>> from pyspark.sql import Row, functions
>> mask = 0b10
>> test = 0b1100010
>> df = spark.createDataFrame([Row(a=mask, b=test)])
>> df.withColumn("c", df.a.bitwiseAND(df.b)).select(functions.col("c")).collect()
   [Row(c=2)]

需求为改造上述代码,通过二进制位运算提取变量test的第2位比特值:

  • 当test取值为0b1100010时,期望返回结果1:位与运算结果十进制为2,对应二进制为10
  • 当test取值为0b11000时,期望返回结果0:此时位与运算结果为0

此前尝试的方案存在问题:将位运算结果cast为BinaryType以获取二进制表示(test = 0b1100010时对应二进制值为10),再转换为字符串提取首字符,但执行cast转换为BinaryType时抛出异常。

运行环境版本:pyspark 2.3.0

可行实现代码
from pyspark.sql import functions as F
from pyspark.sql.types import StringType, IntegerType
mask = 0b10
test = 0b1100010
df = spark.createDataFrame([(mask, test)], ["a", "b"])

df = df.withColumn("bitwise", df.a.bitwiseAND(df.b))
df = df.withColumn("bitwise_str", df.bitwise.cast(StringType()))
df = df.withColumn("binary", F.conv(df.bitwise_str, 10, 2))
df = df.withColumn("boolean_result", F.substring(df.binary.cast(StringType()), 0, 1).cast(IntegerType()))

df.collect()

内容的提问来源于stack exchange,提问作者Mistapopo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 16:33:26