【问题标题】:How to combine Where and Withcolumn in pyspark [duplicate]如何在pyspark中结合Where和Withcolumn [重复]
【发布时间】:2021-06-04 17:27:54
【问题描述】:

我在 pyspark 中有一个这样的数据框:

+--------------------+--------+----------+--------------------+--------------------+
|               title| journal|      date|              author|             content|
+--------------------+--------+----------+--------------------+--------------------+
|Kudlow Breaks Wit...|NYT     |2019-05-01|    By Mark Landler |WASHINGTON — Pres...|
|Scrutiny of Russi...|NYT     |2019-05-01|By Charlie Savage...|WASHINGTON — The ...|
|Greek Anarchists ...|NYP     |2019-05-01|By Niki Kitsantonis |ATHENS — Greek an...|

我正在寻找日志等于“NYP”的替换行。我知道如何处理 sql 上下文:

df.createOrReplaceTempView("tbl_journal")
df = sqlContext.sql("SELECT journal, date FROM tbl_journal where journal like '%NYT%'")
df = df.withColumn('journal', lit('The New York Times'))

但问题是它会重写原始数据帧(我只想替换 journal = 'NYT' 的值并保留其他值)。

其他事情,我搜索其他主题,但我没有找到解决方案来结合 Where 和 WithColumn 语句。我的意思是如果我在 PySpark 中这样做(不是使用 SQL):

df.where(col('journal').like("%NYT%")).withColumn('journal', lit('Oui Test')).show()

它替换所有的值,没有条件。

您知道如何在原始数据框中仅替换具有此条件的值吗?使用 spark 或 sqlcontext。感谢您的提前!

【问题讨论】:

    标签: python apache-spark pyspark apache-spark-sql


    【解决方案1】:

    使用when-otherwise 有条件地填充值-

    from pyspark.sql.functions import when
    df = df.withColumn('journal', when(df.journal.like('%NYT%'), 'The New York Times').otherwise(df.journal))
    

    【讨论】:

    • 非常感谢您的帮助。我在“like”语句中有一个无效语法错误。我用 pyspark 导入了所有的 sql 函数。我不知道是否有一些东西需要用 pyspark 导入才能使用这个语句?
    • 尝试编辑后的答案
    • 好的,我还有一个错误,它是“TypeError:条件应该是一个列”。我认为是关于“journal like '%NYT%' no?
    • 试试更新的,它对我有用。
    • 非常感谢它完美地工作!我不知道 When else 语句,但它工作得很好。祝你有美好的一天:)
    猜你喜欢
    • 1970-01-01
    • 2019-05-12
    • 1970-01-01
    • 2013-02-14
    • 1970-01-01
    • 1970-01-01
    • 2021-02-26
    • 1970-01-01
    • 2020-07-07
    相关资源
    最近更新 更多