我正在寻找一个解决方案,我们可以使用多个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是创建问题,但再次运行查询后,我得到的输出只有第二个查询。似乎它是覆盖第一个查询的数据。有没有什么方法,我们可以实现这个解决方案?
1条答案
按热度按时间zengzsys1#
第二个查询正在覆盖第一个查询
为了避免这种情况,您可以在
.otherwise
中传递数据框列值,因此它将替换您想要的值,并保持以前的值不变。*我的示例数据框架
*我使用的查询