请告诉我如何根据ENUM中的值过滤数据集。下面是我创建的示例数据集
case class Student(id: Int, firstName: String, lastName: String, year: Long, dept: String)
val columns=Array("id", "firstName", "lastName", "year", "dept")
val df = sc.parallelize(Seq(
(1, "John", "Doe", 1986, "CSE"),
(2, "Ive", "Fish", 1990, "CSE"),
(4, "John", "Wayne", 1995, "ECE")
)).toDF(columns: _*)
val resDS = df.as[Student]
我有一个在不同地方使用的现有ENUM。所以想使用相同的ENUM来过滤数据集,如下所示。
object DeptType extends Enumeration {
type DeptType = Value
val CSE, ECE, EEE = Value
def contains(s: String) = values.exists(_.toString == s)
def toList = values.map(_.toString).toList
}
已尝试使用以下2个选项过滤数据集。
resDS.filter(rec => DeptType.contains(rec.dept))
resDS.filter(rec => DeptType.toList.contains(rec.dept))
但两者都因以下错误而失败。请告诉我如何使用ENUM进行过滤。
Caused by: java.lang.NoSuchFieldException: MODULE$
at java.base/java.lang.Class.getField(Class.java:2117)
at scala.Enumeration.readResolve(Enumeration.scala:93)
at scala.Enumeration$Val.readResolve(Enumeration.scala:259)
谢谢
1条答案
按热度按时间ffvjumwh1#
枚举值可以在
isin
子句中使用: