+-----------------+
| columnName|
+-----------------+
| 1 (1)|
| null|
| 11 (10)|
| 2 (3)|
+-----------------+
Числа могут быть как целыми, так и плавающими, но для простоты в примере я использовал целые числа.
Мой существующий код выполняет две функции:
Мой существующий код выполняет две функции:
p>
- Если столбец сортируется, всегда перемещайте строки с нулевым значением для этого столбца в конец.
- Сортировка по число в скобках
Я пытаюсь привести к двойному значению, но не могу понять, почему дело не помогает. Кто-нибудь знает, что здесь не так? Заранее спасибо.
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