У меня есть данные и вопросы, аналогичные задаваемым здесь вопросам: 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