我在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)