Pyspark 中的条件字符串操作
Posted
技术标签:
【中文标题】Pyspark 中的条件字符串操作【英文标题】:Conditional string manipulation in Pyspark 【发布时间】:2020-10-29 08:43:21 【问题描述】:我有一个 Pyspark 数据框,其中包括一列 MSN(字符串类型),如下所示:
+------+
| Col1 |
+------+
| 654- |
| 1859 |
| 5875 |
| 784- |
| 596- |
| 668- |
| 1075 |
+------+
如您所见,那些值小于 1000(即三个字符)的条目末尾有一个 -
字符,总共有 4 个字符。
我想摆脱那个-
字符,所以我最终会得到类似的东西:
+------+
| Col2 |
+------+
| 654 |
| 1859 |
| 5875 |
| 784 |
| 596 |
| 668 |
| 1075 |
+------+
我尝试了以下代码(其中df
是包含该列的数据框,但它似乎不起作用:
if df.Col1[3] == "-":
df = df.withColumn('Col2', df.series.substr(1, 3))
return df
else:
return df
有人知道怎么做吗?
【问题讨论】:
【参考方案1】:您可以使用 F.regexp_replace 将列中的 - 替换为空字符串 ("")
请看下面的代码,
df.withColumn("Col2", F.regexp_replace("Col1", "-", "")).show()
+----+----+
|Col1|Col2|
+----+----+
|589-| 589|
|1245|1245|
|145-| 145|
+----+----+
【讨论】:
【参考方案2】:这是使用.substr()
方法的解决方案:
df.withColumn("Col2", F.when(F.col("Col1").substr(4, 1) == "-",
F.col("Col1").substr(1, 3)
).otherwise(
F.col("Col1"))).show()
+----+----+
|Col1|Col2|
+----+----+
|654-| 654|
|1859|1859|
|5875|5875|
|784-| 784|
|596-| 596|
|668-| 668|
|1075|1075|
+----+----+
【讨论】:
以上是关于Pyspark 中的条件字符串操作的主要内容,如果未能解决你的问题,请参考以下文章