Spark SQL не распознает нулевые значения после разделения - PullRequest
0 голосов
/ 16 октября 2018

У меня есть данные и вопросы, аналогичные задаваемым здесь вопросам: Spark sql, как взорваться без потери нулевых значений

Я использовал решение, предложенное для Spark <= 2.1, и действительноНулевые значения отображаются в моих данных после разделения как литералы: </p>

df.withColumn("likes", explode(
  when(col("likes").isNotNull, col("likes"))
    // If null explode an array<string> with a single null
    .otherwise(array(lit(null).cast("string")))))

Проблема заключается в том, что после этого мне нужно проверить, есть ли в этом столбце нулевые значения, и предпринять действия в этом случае.Когда я пытаюсь запустить мой код, нули, вставленные как литералы, распознаются как строка, а не как нулевые значения.

Таким образом, приведенный ниже код всегда будет возвращать 0, даже если строка содержит ноль в этом столбце:

df.withColumn("likes", f.when(col('likes').isNotNull(), 0).otherwise(2)).show()

+--------+------+
|likes   |origin|
+--------+------+
|    CARS|     0|
|    CARS|     0|
|    null|     0|
|    null|     0|

Я использую Cloudera Pyspark

Ответы [ 2 ]

0 голосов
/ 16 октября 2018

Я действительно нашел способ.В противном случае нужно написать это:

.otherwise (массив (горит (нет) .cast ("строка")))))

0 голосов
/ 16 октября 2018

Вы можете взломать это, используя udf:

val empty = udf(() => null: String)

df.withColumn("likes", explode(
  when(col("likes").isNotNull, col("likes"))
    // If null explode an array<string> with a single null
    .otherwise(array(empty()))))
...