像这样将正则表达式应用于数据框:
val match2 = df.filter($"cityid" rlike "[^0-9]").first
如果发现任何内容,此行代码就可以了,但是如果什么也没找到,则会产生类似这样的错误:
java.util.NoSuchElementException: next on empty iterator
我该如何解决?不确定选项是否可行。
答案 0 :(得分:0)
我不确定数据帧的行为,但是在普通的Scala中,直接使用head方法是一个潜在的问题,例如,当结果列表为空时,将引发类似您发布的列表的异常。 我建议更改为headOption,然后对Option monad进行操作。 希望能有所帮助。 干杯
编辑: 由于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