在 pyspark 中的自定义定界符上拆分字符串

Split string on custom Delimiter in pyspark

我有 foo 列的数据,可以是

foo
abcdef_zh
abcdf_grtyu_zt
pqlmn@xl

从这里我想创建两列

Part 1      Part 2
abcdef       zh
abcdf_grtyu  zt
pqlmn        xl

我为此使用的代码是

data = data.withColumn("Part 1",split(data["foo"],substring(data["foo"],-3,1))).get_item(0)
data = data.withColumn("Part 2",split(data["foo"],substring(data["foo"],-3,1))).get_item(1)

但是我得到一个不可迭代的错误列

以下应该有效

>>> from pyspark.sql import Row
>>> from pyspark.sql.functions import expr
>>> df = sc.parallelize(['abcdef_zh', 'abcdfgrtyu_zt', 'pqlmn@xl']).map(lambda x: Row(x)).toDF(["col1"])
>>> df.show()
+-------------+
|         col1|
+-------------+
|    abcdef_zh|
|abcdfgrtyu_zt|
|     pqlmn@xl|
+-------------+
>>> df.withColumn('part2',df.col1.substr(-2, 3)).withColumn('part1', expr('substr(col1, 1, length(col1)-3)')).select('part1', 'part2').show()
+----------+-----+
|     part1|part2|
+----------+-----+
|    abcdef|   zh|
|abcdfgrtyu|   zt|
|     pqlmn|   xl|
+----------+-----+