微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在pyspark中结合Where和Withcolumn

如何解决如何在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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?