Spark:如何删除 df 列值中不必要的字符



我有这样的df,

+----+---+
| _c0|_c1|
+----+---+
|('a'| 2)|
|('b'| 4)|
|('c'| 6)|
+----+---+

我想像下面怎么做,

+----+---+
| _c0|_c1|
+----+---+
| a  | 2 |
| b  | 4 |
| c  | 6 |
+----+---+

如果我尝试这样得到错误

df1.select(regexp_replace('_c0', "('", "c")).show()

调用 o789.showString 时出错。 org.apache.spark.SparkException:作业由于阶段故障而中止: 阶段 71.0 中的任务 1 失败了 1 次,最近一次失败:任务丢失 阶段 71.0 中的 1.0(TID 184,本地主机,执行器驱动程序):java.util.regex.PatternSyntaxException:索引 2 附近的未闭合组

就像其他用户所说的那样,有必要用反斜杠转义括号等特殊字符。在这里,您可以找到正则表达式特殊字符的列表。下面的代码使用两种不同的方法来解决您的问题。使用 regexp_extract 我们提取第 _c0 列中 (' 和 ' 之间的单个字符。用regexp_replace替换第二列中的 )。当然,您只能将regexp_replace函数与正则表达式"[()']"一起使用来实现您想要的。我只是想向你们展示两种不同的方法来解决这个问题。

from pyspark.sql import functions as F
columns = ['_c0', '_c1']
vals = [("('a'", "2)"),("('b'", "4)"),("('c'", "6)")]
df = spark.createDataFrame(vals, columns)
df = df.select(F.regexp_extract('_c0', "('(w)'", 1).alias('_c0')
             , F.regexp_replace("_c1", ")", "").alias('_c1'))
df.show()

输出:

+---+---+ 
|_c0|_c1| 
+---+---+ 
|  a|  2| 
|  b|  4| 
|  c|  6| 
+---+---+

您应该转义括号:

df1.select(regexp_replace('_c0', "\('", "c")).show()

相关内容

  • 没有找到相关文章

最新更新