【问题标题】:Update Pyspark rows for a column based on other column [duplicate]根据其他列更新列的 Pyspark 行 [重复]
【发布时间】:2018-10-13 04:01:00
【问题描述】:

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

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 列中记录的值

【问题讨论】:

    标签: apache-spark pyspark


    【解决方案1】:

    @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。但我不确定用例,所以我将其保留在示例中。

    希望这会有所帮助,干杯!

    【讨论】:

    • 如何在 when(new_df.name == "sam","tested") 中包含两个字符串比较。我试过when(new_df.name == "sam" or "Tim","tested") 它给了我错误
    • 查找isin()api
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多