修改所有列pyspark中的值

时间:2018-10-31 20:31:08

标签: replace pyspark apache-spark-sql conditional-statements

我有一个pyspark数据框,我想有条件地替换多个列中的字符串,而不仅仅是一个。 更具体地讲:我想将字符串'HIGH'替换为1,并将列中的所有其他内容替换为0。[或者至少将每个'HIGH'替换为1。]在熊猫中,我会做:

df[df == 'HIGH'] = 1

有没有办法做类似的事情?还是可以循环播放?

我是pyspark的新手,所以我不知道如何生成示例代码。

1 个答案:

答案 0 :(得分:1)

您可以为此使用replace方法:

>>> df.replace("HIGH", "1")

请记住,您需要像like这样的数据类型进行替换,因此尝试将"HIGH"替换为1会引发异常。

编辑:您也可以使用regexp_replace来解决问题的两个部分,但是您需要将其应用于所有列:

>>> df = df.withColumn("col1", regexp_replace("col1", "^(?!HIGH).*$", "0"))
>>> df = df.withColumn("col1", regexp_replace("col1", "^HIGH$", "1"))