Как поймать проблему кастинга в SparkSQL - PullRequest
0 голосов
/ 11 декабря 2018

При использовании SparkSQL версии 2.1.1 при сбой приведение к целевому значению устанавливается в (ноль).Например, следующее утверждение:

spark.sqlContext.sql("SELECT cast(column_1 AS DECIMAL(3, 2) from table")

приведет к этому:

in:               out:
-------          ----------
| '1' |          | 1.00   |
-------          ----------
| 'b' |          | (null) |
-------          ----------
| '3' |          | 3.00   |
-------          ----------

В этом случае я хотел бы проинформировать / предупредить пользователя об этом путем спулинга числа случаев ивозможно даже номер затронутой строки.Есть ли способ добиться этого?

То, что я уже пробовал, это добавить столбец в DataFrame с суммой MD5 по всем столбцам каждой строки для сравнения исходного и целевого DataFrame.Однако в приведенном выше примере это не сработает из-за добавления десятичных дробей.

1 Ответ

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

Вы можете попробовать зарегистрировать UDF, чтобы ловить ошибки и вызывать его во время приведения.

val customCast = spark.udf.register("numCasting", (x:String) => scala.util.control.Exception.catching(classOf[NumberFormatException]).opt(x.toDouble))

, а затем использовать его в DF

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