Python 通过比较同一数据帧中两个不同列之间的数据,在pyspark数据帧中填充一列
目的:实现此查询Python 通过比较同一数据帧中两个不同列之间的数据,在pyspark数据帧中填充一列,python,apache-spark,pyspark,apache-spark-sql,Python,Apache Spark,Pyspark,Apache Spark Sql,目的:实现此查询 选择*, 新建时的情况!=x或新y!=然后“某些状态更改”,否则cdc状态结束为cdc状态 来自数据帧,其中cdc_状态='noUpdateRequired' 我正在尝试使用pyspark(3.0.0)和spark(2.4.4)实现这个逻辑,目前我有这个 df = df.withColumn("cdc_status", F.when(((F.col('cdc_status') == 'noUpdateR
选择*,
新建时的情况!=x或新y!=然后“某些状态更改”,否则cdc状态结束为cdc状态
来自数据帧,其中cdc_状态='noUpdateRequired'
我正在尝试使用pyspark(3.0.0)和spark(2.4.4)实现这个逻辑,目前我有这个
df = df.withColumn("cdc_status",
F.when(((F.col('cdc_status') == 'noUpdateRequired')
& (F.col('new_autoapproveind') != F.col('autoapproveind')
| F.col('new_preferpathway') != F.col('preferpathway'))), 'pathwayChange'))
但这让我犯了以下错误
ValueError: Cannot convert column into bool: please use '&' for 'and', '|' for 'or', '~' for 'not' when building DataFrame boolean expressions
因此,基本上我需要一个能够更新列cdc\u status
,其中new\u x!=x或新y!=y,其中cdc_状态='noUpdateRequired'
df.printSchema()
root
|-- new_autoapproveind: string (nullable = true)
|-- new_preferpathway: string (nullable = true)
|-- autoapproveind: string (nullable = true)
|-- preferpathway: string (nullable = true)
|-- cdc_status: string (nullable = true)
我在打印模式时删除了一些列,因为它们本质上是敏感的,但本质上它们也是基于字符串的列
我试着到处搜索,但在pyspark
中找不到相同的解决方案<代码>scala具有==代码>运算符,但不存在相同的pyspark
虽然我可以在其他情况下使用when
函数,但它是F.col('cdc_status')!='一些值“)
其中它是一个静态值,但这里我需要比较列之间的值,然后填充/更新cdc\u status
列中的值
任何帮助都将不胜感激 您的条件中缺少括号,这导致了错误。也就是说,您的Python代码可能与SQL查询不同。您应该在添加新列之前进行筛选,还应该添加否则
子句。e、 g
import pyspark.sql.functions as F
df2 = df.filter("cdc_status = 'noUpdateRequired'").withColumn(
'cdc_status',
F.when(
(F.col('new_autoapproveind') != F.col('autoapproveind'))
|
(F.col('new_preferpathway') != F.col('preferpathway')),
'some_status_change'
).otherwise(
F.col('cdc_status')
)
)