如何在pyspark中使用多个when条件来更新列值

c7rzv4ha  于 2022-11-01  发布在  Spark
关注(0)|答案(1)|浏览(225)

我正在寻找一个解决方案,我们可以使用多个when条件来更新pyspark中的列值。
我目前正在尝试实现一个解决方案,当我们在spark中有多个条件时,我们如何更新一个列。我有一个 Dataframe ,其中有三个列DATE、Flag_values、salary:

df = df.withColumn('Flag_values', F.when(F.col('DATE') < '2019-08-01', 'GIVEHIKE').otherwise(''))

在此之后,我必须使用多个条件更新相同的Flag_values列:

new_column=when((col("Flag_values")=='') & (col("DATE")<'2019-12-15'),'GIVE BONUS ONLY').otherwise('')
df = df.withColumn("Flag_values", new_column)

但是当我同时运行这两个查询时,第二个查询用我不需要的数据覆盖了第一个查询。我需要两个查询条件的数据。
我还尝试过的其他查询有:

df = df.withColumn('Flag_values', F.when(F.col('DATE') < '2019-08-01', 'GIVEHIKE').otherwise('PYTHON'))

df = df.withColumn('Flag_values', F.when((F.col('DATE') < '2019-12-15') & (F.col('Flag_values') == 'PYTHON') , 'GIVE BONUS').otherwise('JAVA'))

我想可能是其他null是创建问题,但再次运行查询后,我得到的输出只有第二个查询。似乎它是覆盖第一个查询的数据。有没有什么方法,我们可以实现这个解决方案?

zengzsys

zengzsys1#

第二个查询正在覆盖第一个查询

为了避免这种情况,您可以在.otherwise中传递数据框列值,因此它将替换您想要的值,并保持以前的值不变。

*我的示例数据框架

*我使用的查询

df2 = df1.withColumn('Flag_values', when(df1.date < '2019-08-01', 'GIVEHIKE').otherwise(''))
new_column=when((df2.Flag_values == '') & (df2.date < '2019-12-15'),'GIVE BONUS ONLY').otherwise(df2.Flag_values)
df3 = df2.withColumn("Flag_values", new_column)
df3.show()
  • 执行时间

相关问题