Разделение столбца в PySpark: как обеспечить вывод массива типа int, но с пустыми массивами для определенного символа - PullRequest
0 голосов
/ 24 февраля 2020

У меня есть столбец данных, который выглядит как

./. или 0/1

и должен быть разбит на массивы целых чисел со строкой /, с оговоркой, что . должно быть пустым.

моя первая попытка сделать это:

df2 = df2.withColumn('genotype_indices', split(col("genotype_index"), "/").cast("array<int>")).alias("genotype_indices")

, но проблема в том, что . приводится как 0, что не правильно.

Я действительно не хочу использовать пользовательские функции, так как они могут сделать ноутбуки неоправданно медленными.

Как я могу заставить . привести к None или пустому , а все остальные целочисленные строки как целые числа в PySpark?

1 Ответ

2 голосов
/ 24 февраля 2020

Я думаю, что он конвертируется как 0, потому что . используется в числах с плавающей запятой для десятичных чисел и эквивалентно 0.0, поэтому при приведении к типу int он дает 0.

Вы можете удалить точки перед разделением, используя функцию regexp_replace:

df2 = df2.withColumn('genotype_indices', split(regexp_replace(col("genotype_index"), "\\.", ""), "/").cast("array<int>"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...