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

Apache spark Spark:如何删除df列值中不必要的字符,apache-spark,pyspark,apache-spark-sql,Apache Spark,Pyspark,Apache Spark Sql,我有这样的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.show

我有这样的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.sparkeexception:由于阶段失败,作业中止: 阶段71.0中的任务1失败1次,最近一次失败:任务丢失 阶段71.0中的1.0(TID 184,本地主机,执行器驱动程序):java.util.regex.PatternSyntaxException:索引2附近的未关闭组


您应该避开括号:

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

正如其他用户所说,有必要用反斜杠转义特殊字符,如括号。您可以找到正则表达式特殊字符的列表。下面的代码使用两种不同的方法解决您的问题。使用,我们提取第二列中('and'在列_c0中。使用替换)之间的单个字符。当然,您只能使用带有regex“[()”]”的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| 
+---+---+

非常感谢你。。。但是我得到的ans是这样的,a'b'c',那么如何清除这个'
df.select(regexp_replace(“value”),“[()”,”)