在pyspark数据框中添加新列,比较同一数据框中存在的两列

在pyspark数据框中添加新列,比较同一数据框中存在的两列,pyspark,pyspark-dataframes,Pyspark,Pyspark Dataframes,我有一个数据帧,有两列COL_1和COL_2 我想再添加一列COL_3,COL_3的值将取决于COL_1和COL_2的比较,如下表所示 当两个值相同列3=有效时 当两个值的列3不同=无效时 当两个值都为null列3=null时 我尝试了一些低于代码的东西,但不起作用 df\u Input=dataframe。with column(“COL\u 3”),(COL(“COL\u 1”)!=COL(“COL\u 1”)),lit(“无效”)。否则(lit(“有效”)首先将在读取CSV文件时使用l

我有一个数据帧,有两列COL_1和COL_2

我想再添加一列COL_3,COL_3的值将取决于COL_1和COL_2的比较,如下表所示

当两个值相同列3=有效时

当两个值的列3不同=无效时

当两个值都为null列3=null时

我尝试了一些低于代码的东西,但不起作用


df\u Input=dataframe。with column(“COL\u 3”),(COL(“COL\u 1”)!=COL(“COL\u 1”)),lit(“无效”)。否则(lit(“有效”)
首先将在读取CSV文件时使用
lit
函数添加具有默认值的col3

df = spark.read.format("csv").option("header", "true").option("delimiter","|").load('test.csv').withColumn('COL_3',lit('Invalid'))
现在将使用
when
功能检查状况

df = df.withColumn('COL_3', when((col("COL_1") == col("COL_1")), 'Valid').when((col("COL_1") == 'null') & (col("COL_2" == 'null')),'null').otherwise(col('COL_3')))
在这里,我首先添加一列COL_3,并借助when函数检查COL_1和COL_2是否相等或不同,并为COL_3指定有效值和无效值。
如果列1和列2为空,则将NA分配给列3

如果两个列值都有
null
,会发生什么情况?我还添加了null条件。@samkart是正确的,不需要使用其他方法,或者在read.df=df.withColumn('COL_3',when((COL(“COL_1”)==COL(“COL_2”),'Valid')。when((COL(“COL_1”)!=COL(“COL_2”),'Invalid')。否则(lit(“null”))……我正在努力this@aamirmalik124spark中的null值用None表示,而不是“null”字符串,也就是说,除非您的数据帧null被指定为“null”字符串。您已经接近了。使用
func.when()
并给出两个标准,
func.when(col('col_1')==col('col_2')、lit('valid'))。when(col('col_1')!=col('col_2')、lit('valid'))
null
将不满足任何条件,因此将导致
null
```df = df.withColumn('COL_3',\
        when((col("COL_1") == col("COL_2")), 'Valid').\
        when((col("COL_1") != col("COL_2")), 'Invalid').\
        otherwise(lit("NA")))```