при загрузке tempView пустая строка отображается как ноль - PullRequest
0 голосов
/ 01 февраля 2019

Я провожу некоторые тесты в спарк.Для этого я загружаю CSV-файл, чтобы сравнить мои результаты с.

Мой эталон

;;NULL;2017-03-21
;;NULL;2017-03-21
;;NULL;2017-03-21

Вот так я загружаю файл

spark.read.schema(Table.schema)
      .format("com.databricks.spark.csv")
      .option("delimiter", ";")
      .option("nullValue", "NULL")
      .load(pathTable)
      .createTempView(param.TABLE)

Это моя схема

  val fields = Seq(
    StructField("balance", StringType, nullable = true),
    StructField("status", StringType, nullable = true),
    StructField("status_date", DateType, nullable = true),
    StructField("time_key", StringType, nullable = true)
  )
  val schema = StructType(fields)

По какой-то причине balance и status загружаются как NULL, когда они должны быть пустыми строками.

+-------+------+-----------+----------+
|balance|status|status_date|  time_key|
+-------+------+-----------+----------+
|   null|  null|       null|2017-03-21|
|   null|  null|       null|2017-03-21|
|   null|  null|       null|2017-03-21|
+-------+------+-----------+----------+

Почему это так и как я могу отобразить его в виде пустой строки?

Ответы [ 3 ]

0 голосов
/ 01 февраля 2019

Кажется, для этого возникла проблема, которая решена в 2.4

SPARK-17916

0 голосов
/ 01 февраля 2019

В Spark нормальное поведение.См. Эту статью Обработка Spark пустых строк и пустых значений в файлах CSV .

Чтобы исправить это, вы можете заменить пустые значения в строковых столбцах пустой строкой, например:

df.withColumn("balance", coalesce(col("balance"), lit(""))
0 голосов
/ 01 февраля 2019

Я не знаю, почему это происходило, но

.na.fill("", Seq("balance", "status"))

помогло заменить нули.

...