PySpark SQL TRY_CAST? - PullRequest
       8

PySpark SQL TRY_CAST?

0 голосов
/ 07 декабря 2018

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

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

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

Это не работает, оно никогда не будет разыгрываться в конце.

Возможно ли что-то подобное вообще (в совершенной манере без UDF и т. Д.)?

1 Ответ

0 голосов
/ 07 декабря 2018

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

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

...