根据其他列

时间:2018-05-02 23:22:09

标签: apache-spark pyspark

我在data frame中有一个pyspark,如下所示。

df.show()
+---+----+
| id|name|
+---+----+
|  1| sam|
|  2| Tim|
|  3| Jim|
|  4| sam|
+---+----+

现在我向df添加了一个新列,如下所示

from pyspark.sql.functions import lit
from pyspark.sql.types import StringType
new_df = df.withColumn('new_column', lit(None).cast(StringType()))

现在,当我查询new_df

new_df.show()
+---+----+----------+
| id|name|new_column|
+---+----+----------+
|  1| sam|      null|
|  2| Tim|      null|
|  3| Jim|      null|
|  4| sam|      null|
+---+----+----------+

现在我想根据条件更新new_column中的值。

我正在尝试编写以下条件,但无法这样做。

如果namesam,那么new_column应为tested其他not_tested

if name == sam:
    then update new_column to tested
else:
    new_column == not_tested

如何在pyspark中实现这一目标。

  

编辑   我不是在寻找if else语句,而是如何更新pyspark

中记录的值

1 个答案:

答案 0 :(得分:0)

@ user9367133感谢您的联系,如果您按照我在similiar question you pointed上的答案,它的逻辑几乎相同 -

from pyspark.sql.functions import *

new_df\
.drop(new_df.new_column)\
.withColumn('new_column',when(new_df.name == "sam","tested").otherwise('not_tested'))\
.show()

如果您要立即替换正确的值,则不一定要将new_column预先添加为null。但我不确定用例,所以我把它保留在我的例子中。

希望这会有所帮助,欢呼!