DF.filter с пустым результатом регулярного выражения возвращает исключение nosuchElement - PullRequest
0 голосов
/ 25 сентября 2018

Применение регулярных выражений к фрейму данных следующим образом:

val match2 = df.filter($"cityid" rlike "[^0-9]").first

Эта строка кода в порядке, если что-то найдено, но выдает ошибку, например, если ничего не найдено:

java.util.NoSuchElementException: next on empty iterator

Как я могу обойти это?Не уверен, что вариант - это вариант.

1 Ответ

0 голосов
/ 25 сентября 2018

Я не уверен, как ведет себя фрейм данных, но в простом Scala прямое использование метода head является потенциальной проблемой, например, когда результирующий список пуст, возникает исключение, подобное тому, которое вы опубликовали.Я бы предложил перейти на headOption, а затем работать над монадой Option.Надеюсь, это поможет.Приветствия

РЕДАКТИРОВАТЬ: Поскольку DataFrame (DataSet [T]) не имеет элегантного способа обработки операции, аналогичной headOption, я предлагаю следующее решение:

implicit class DataSetOps(myDataSet: Dataset[T]) {
  def headOption: Option[T] = {
    myDataSet.count match {
      case size if size > 0 => Option(myDataSet.first)
      case _ => None
    }
  }
}

Затем вы можете сделать что-токак

val myFirstElementAsOpt: Option[T] = myDataSet.headOption
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...