Scala Spark Sql - чтение нулевых значений из строки Hive - PullRequest
0 голосов
/ 16 апреля 2020

У меня есть таблица улья table_1 со следующей схемой

field_1 string
field_2 string
field_3 
  - field_3_1 string
  - field_3_2 double (nullable)

Когда у меня есть запись со следующими значениями

field_1: "100"
field_2: "name"
field_3: 
  - field_3_1: "category_1"
  - field_3_2: null

Я пытаюсь прочитать это значение из Scala следующим образом

sparkSession.sql("select field_1, field_3 from table_1 where field_1 ='100'").na
      .fill(new lang.Double(0), Seq("field_3.field_3_2")).foreach { r =>
          println(r)
    }

И я продолжаю сталкиваться с этой ошибкой

java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Double

Я не контролирую, как значения заполняются в таблице кустов. Я нахожу довольно трудным преодолеть эту ошибку даже при широком поиске в Интернете. Может быть, я где-то пропустил подсказку. Может ли кто-нибудь помочь с этим? Спасибо

Ответы [ 2 ]

0 голосов
/ 17 апреля 2020

Отвечая на мой собственный вопрос:

Оказывается, проблема была с json-serde-1.3-jar-with-dependencies, заменили ее на версию 1.3.8, и это исправило ее.

0 голосов
/ 16 апреля 2020

Если я правильно понимаю ваш код, вы хотите заменить нулевые значения field_3.field_3_2 на нулевое значение, верно?

Я попытался смоделировать его, но не получаю эту ошибку (хотя она не заполняется) я с нулями), может быть, вы должны попробовать это:

spark.sql("select field_1, field_3 from table_1")
        .withColumn("field_3.field_3_2",when(col("field_3.field_3_2").isNull(),lit(0)).otherwise(col("field_3.field_3_2")))

он заменит нулевые значения в нуле (и если поле имеет значение NotNull, оно сохранит исходное значение).

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