如何解决如何在pyspark中结合Where和Withcolumn
我在 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。感谢提前!
解决方法
使用 when-otherwise
有条件地填充值-
from pyspark.sql.functions import when
df = df.withColumn('journal',when(df.journal.like('%NYT%'),'The New York Times').otherwise(df.journal))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。