Учитывая приведенный ниже фрейм данных, я хотел разбить столбец чисел на массив из 3 символов на элемент исходного числа в массиве
Заданный фрейм данных:
+---+------------------+
| id| numbers|
+---+------------------+
|742| 000000000|
|744| 000000|
|746|003000000000000000|
+---+------------------+
Ожидаемый фрейм данных:
+---+----------------------------------+
| id| numbers |
+---+----------------------------------+
|742| [000, 000, 000] |
|744| [000, 000] |
|746| [003, 000, 000, 000, 000, 000] |
+---+----------------------------------+
Я пробовал разные регулярные выражения при использовании функции split
, приведенной ниже с регулярным выражением, которое, по моему мнению, должно было сработать с самой первой попытки:
import pyspark.sql.functions as f
df = spark.createDataFrame(
[
[742, '000000000'],
[744, '000000'],
[746, '003000000000000000'],
],
["id", "numbers"]
)
df = df.withColumn("numbers", f.split("numbers", "[0-9]{3}"))
df.show()
Результат, однако, равен
+---+--------------+
| id| numbers|
+---+--------------+
|742| [, , , ]|
|744| [, , ]|
|746|[, , , , , , ]|
+---+--------------+
Я хочу понять, что я делаю неправильно. Есть ли возможность установить глобальный флаг для получения всех совпадений или я что-то пропустил в регулярном выражении?