Я хотел бы построить структуру, которая связывает шаблон регулярного выражения с описанием функции в некотором тексте. Существуют тысячи возможных описаний этого текста, поэтому группировка скомпилированного шаблона регулярного выражения с его описанием позволит мне эффективно выполнять поиск. Ниже приведена ключевая часть моего кода:
import org.apache.spark.sql.functions._
import org.apache.spark.sql.types._
import org.apache.spark.sql.SparkSession
import org.apache.spark.sql.{Encoder, Encoders}
import scala.util.matching.Regex
object GlueApp {
case class RegexMetadata(regexName: String, pattern: scala.util.matching.Regex)
def main(sysArgs: Array[String]) {
val args = GlueArgParser.getResolvedOptions(sysArgs, Seq("JOB_NAME").toArray)
val sc: SparkContext = new SparkContext()
val glueContext: GlueContext = new GlueContext(sc)
val spark = glueContext.getSparkSession
import spark.implicits._
Job.init(args("JOB_NAME"), glueContext, args.asJava)
implicit val regexEncoder = Encoders.kryo[scala.util.matching.Regex]
implicit val regexMetadataEncoder = Encoders.product[RegexMetadata]
Job.commit()
}
}
Когда я запускаю это, я получаю следующую ошибку: java.lang.UnsupportedOperationException No Encoder found for scala.util.matching.Regex
Он компилируется и работает нормальнокогда у меня нет строки «неявный val regexMetadataEncoder». Похоже, что это работает на Databricks, но не на AWS Glue.
Некоторые поиски нашли эти похожие вопросы, но я не могу решить мою проблему с ними:
универсальный кодировщик scalaдля класса искрового корпуса
Спасибо за помощь!
Spark 2.x scala 2.1.1 несоответствие типов пользовательских кодировщиков