Сортировка столбца pyspark после регулярного выражения и приведение к двойной сортировке лексикографически, а не численнPython

Программы на Python
Anonymous
Сортировка столбца pyspark после регулярного выражения и приведение к двойной сортировке лексикографически, а не численн

Сообщение Anonymous »

Мои данные выглядят так:
+-----------------+
| columnName|
+-----------------+
| 1 (1)|
| null|
| 11 (10)|
| 2 (3)|
+-----------------+

Числа могут быть как целыми, так и плавающими, но для простоты в примере я использовал целые числа.
Мой существующий код выполняет две функции:
Мой существующий код выполняет две функции:
p>
  • Если столбец сортируется, всегда перемещайте строки с нулевым значением для этого столбца в конец.
  • Сортировка по число в скобках
В приведенном выше примере я ожидаю, что порядок сортировки чисел в скобках будет 1, 3, 10, но вместо этого происходит сортировка по 1, 10, 3. Я думаю, что сортировка выполняется лексикографически, поэтому сортируется "1" в "10" вместо всего числа "10".
Я пытаюсь привести к двойному значению, но не могу понять, почему дело не помогает. Кто-нибудь знает, что здесь не так? Заранее спасибо.
from pyspark.sql import functions as F

def apply_regex(column: Column, pattern: str, group: int):
extracted = F.regexp_extract(column, pattern, group)
return F.when(extracted == "", column).otherwise(extracted.cast("double"))

def sort(dataframe, column_name: str, direction: str):
col = F.col(column_name)
# Group 3 is the number inside the parentheses
col = apply_regex(col, r"(\d+(\.\d+)?) \((\d+(\.\d+)?)\)", 3)
col = F.when(col.isNull(), F.lit(None)).otherwise(col)
sort_exprs = [col.asc() if direction == "asc" else col.desc()]
return dataframe.orderBy(*sort_exprs)


Подробнее здесь: https://stackoverflow.com/questions/785 ... ographical

Вернуться в «Python»