匹配字符串中用于拆分操作的未关闭字符



我在pyspark数据框架列中有以下信息:

[["A"],["B"]]

["A","B"]

我想按照第一个实例拆分值出现的列,并保留第二个实例中的值完整。

但是,当试图通过split操作执行此操作时:

df = df.selectExpr("split(col, '],[') col")

我收到以下错误:

'Unclosed character class near index...'

我也尝试用等价的ascii字符替换实际字符:

df = df.selectExpr("split(col, 'x5D2Cx5B') col")

但是它导致了和上面一样的错误。

欢迎提出任何建议。Tnx .

当你使用char[时,很明显有一些非常奇怪的东西。如果你删除了这个字符,就不会有错误了。

但是你也可以使用函数版本的split,它解决了这个问题:

from pyspark.sql import functions as F
df.select(F.split(F.col("col"), '],[')).show()
+----------------+
|split(col, ],[)|
+----------------+
|  [[["A", "B"]]]|
|     [["A","B"]]|
+----------------+

如果我们不考虑你的实际问题,但你所面临的实际用例,from_json可能是一个更好的主意:

schema_1 = T.ArrayType(T.StringType())
schema_2 = T.ArrayType(T.ArrayType(T.StringType()))
df2 = df.select(
"col",
F.from_json("col", schema_1),
F.from_json("col", schema_2)
)
df2.show()
+-------------+------------------+------------------+                           
|          col|jsontostructs(col)|jsontostructs(col)|
+-------------+------------------+------------------+
|[["A"],["B"]]|    [["A"], ["B"]]|        [[A], [B]]|
|    ["A","B"]|            [A, B]|              null|
+-------------+------------------+------------------+
df2.printSchema()
root
|-- col: string (nullable = true)
|-- jsontostructs(col): array (nullable = true)
|    |-- element: string (containsNull = true)
|-- jsontostructs(col): array (nullable = true)
|    |-- element: array (containsNull = true)
|    |    |-- element: string (containsNull = true)

最新更新