Pyspark中的条件字符串操作

Pyspark中的条件字符串操作,pyspark,Pyspark,我有一个Pyspark数据帧,其中包括一列MSN(字符串类型),如下所示: +------+ | Col1 | +------+ | 654- | | 1859 | | 5875 | | 784- | | 596- | | 668- | | 1075 | +------+ 如您所见,值小于1000(即三个字符)的条目末尾有一个-字符,总共有4个字符 我想去掉-字符,这样我就可以得到如下结果: +------+ | Col2 | +------+ | 654 | | 1859 | | 5875

我有一个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

有人知道怎么做吗?

您可以使用F.regexp\u replace将列中的-替换为空字符串(“”)

参见下面的代码

df.withColumn("Col2", F.regexp_replace("Col1", "-", "")).show()

+----+----+
|Col1|Col2|
+----+----+
|589-| 589|
|1245|1245|
|145-| 145|
+----+----+

下面是使用
.substr()
方法的解决方案:

df.withColumn(“Col2”,F.when(F.col(“Col1”))substr(4,1)=“-”,
F.col(“Col1”).子条款(1,3)
).否则(
F.col(“Col1”).show()
+----+----+
|Col1 | Col2|
+----+----+
|654-| 654|
|1859|1859|
|5875|5875|
|784-| 784|
|596-| 596|
|668-| 668|
|1075|1075|
+----+----+