Bezdepbonusu7Программирование: статьи и ответы

Вопрос

PySpark SQL TRY_CAST?

Автор вопроса: silentОтветов: 1

У меня есть данные в Dataframe, все столбцы в виде строк. Теперь некоторые данные в столбце числовые, поэтому я могу преобразовать их в float. Другие строки на самом деле содержат строки, которые я не хочу преобразовывать.

Так что я искал что-то вроде try_cast и уже пытался что-то построить на .when().otherwise(), но пока безуспешно.

casted = data.select(when(col("Value").cast("float").isNotNull(), col("Value").cast("float")).otherwise(col("Value")))

Это не работает, в итоге никогда не забросит.

Возможно ли что-то подобное (производительно без UDF и т. Д.)?

apache-sparkpysparkpyspark-sql

Ответы

Ответ 1 · рейтинг 2 · Mariusz

В искре не может быть столбца с двумя типами: либо с плавающей точкой, либо с строкой. Вот почему ваш столбец всегда имеет string тип (потому что он может содержать как строки, так и числа с плавающей запятой).

Ваш код делает следующее: если число в столбце Value не помещается в число с плавающей запятой, оно будет преобразовано в число с плавающей запятой, а затем в строку (попробуйте с> 6 десятичными знаками). Насколько мне известно, TRY_CAST преобразуется в значение или ноль (по крайней мере, в SQL Server), так что это именно то, что делает искра cast.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы