Как удалить записи, которые содержат пустые значения в СДР, который содержит данные CSV? - PullRequest
0 голосов
/ 06 января 2019

Я пытаюсь отобразить значения из CSV-файла в RDD, но я получаю следующую ошибку, потому что некоторые поля имеют нулевое значение.

Исключение в потоке "main" org.apache.spark.SparkException: задание прервано из-за сбоя этапа: задание 0 на этапе 0.0 не выполнено 1 раз, последний сбой: потерянное задание 0.0 на этапе 0.0 (TID 0, localhost, executor драйвер): java.lang.NumberFormatException: пустая строка

Ниже приведен код, который я использую.

// Load and parse the data
val data = sc.textFile("data.csv")

val parsedData = data.map(s => Vectors.dense(s.split(',').map(_.toDouble))).cache()

Есть ли способ проверить, есть ли ноль? Я думал сделать это с помощью метода try catch, но, похоже, он не работает.

val parsedData = data.map(s => {

  try {
    val vector = Vectors.dense(s.split(',').map(_.toDouble))
  }catch{
    case e:NumberFormatException => println("Nulls somewhere")
  }
  (vector)
})

1 Ответ

0 голосов
/ 06 января 2019

Вы можете отфильтровать пустой элемент, просто добавьте метод filter в ваш поток:

val parsedData = data.map(s => Vectors.dense(s.split(',').filter(!_.isEmpty).map(_.toDouble))).filter(_.size != 0)

Таким образом, любая пустая строка приведет к пустому Vector, который может быть отфильтрован.

...