Spark - обрабатывать пустые значения в CSV-файле - PullRequest
0 голосов
/ 23 января 2020

Допустим, у меня есть простой файл с разделителями каналов с пропущенными значениями:

A|B||D

Я прочитал это в фрейм данных:

val foo =  spark.read.format("csv").option("delimiter","|").load("/path/to/my/file.txt")

Вместо этого отсутствует третий столбец значение NULL, имеет строку NULL:

+-----------+----+
|_c0|_c1| _c2|_c3|
+-----------+----+
|a  |b  |null|c  |

Я хотел бы иметь возможность контролировать, что Spark делает с этим отсутствующим значением. Согласно документации CSV , существует опция nullValue:

nullValue: строка, указывающая нулевое значение, любые поля, соответствующие этой строке, будут установлены как пустые в DataFrame.

Но так как у меня там нет никакого значения, я не могу контролировать его таким образом.

За исключением тестирования каждого поля каждого файла, который я прочитайте, есть ли способ контролировать, что искра делает с этими пробелами? Например, замените его на «N / A».

Мы используем Spark 2.1, если это уместно.

1 Ответ

0 голосов
/ 24 января 2020

Параметры nullValue и emptyValue не соответствуют вашим ожиданиям - они позволяют вам указать значения, которые, если они встречаются в исходных данных, должны быть преобразованы в null или "" (соответственно) в результирующий кадр данных. Например, если вместо этого вы вводите

a|b|N/A|d

и вы устанавливаете

option("nullValue", "N/A")

, вы снова получите

+-----------+----+
|_c0|_c1| _c2|_c3|
+-----------+----+
|a  |b  |null|c  |

Более конкретно, Spark включает функции для работы с нулевыми значениями в классе DataFrameNaFunctions . Например, df.na.fill("N/A") заменит все null экземпляров в строковых столбцах на "N/A".

...