使用pyspark过滤器时丢失数据选择when和others

z31licg0  于 2023-08-02  发布在  Spark
关注(0)|答案(1)|浏览(159)

我有一个dataframe df 1:
| B| B |
| --| ------------ |
| 测试1| test 1 |
| 测试3| test 3 |
| 测试2| test 2 |
| 测试4| test 4 |
| 测试5| test 5 |
我只想为列A保留3个值:null、AAAA和BBBB我做了过滤器:

df2= df1.select(col('*'),F.when(~col("A").isin(['AAAA','BBBB']),"null")
        .otherwise(col("A")).alias("C")
)

字符串
我想要这个:
| C类|B| B |
| --|--| ------------ |
| 零|测试1| test 1 |
| 零|测试3| test 3 |
| AAAA|测试2| test 2 |
| BBBB|测试4| test 4 |
| 零|测试5| test 5 |
但是我得到的是不同的,我丢失了所有值等于AAAA的行:
| C类|B| B |
| --|--| ------------ |
| 零|测试1| test 1 |
| 零|测试3| test 3 |
| BBBB|测试4| test 4 |
| 零|测试5| test 5 |
你知道是什么问题吗?谢啦,谢啦

4dbbbstv

4dbbbstv1#

这是用于过滤值为[AAAA, BBBB]NULL的列A的有效代码

from pyspark.sql import functions as F

df1 = df1.withColumn('C', F.when(F.col('A').isin(['AAAA', 'BBBB']), F.col('A')).otherwise(F.lit(None)))

字符串
您不是在筛选列,而是在基于A的值创建一个新列。

相关问题