【发布时间】:2020-02-03 15:01:36
【问题描述】:
我想构建一个结构,将正则表达式模式链接到某些文本中的功能描述。
示例: "^.* horses .$" 映射到'horses'; "^. pigs .*$" 映射到 'pigs' 等等
此文本有数千种可能的描述,因此将已编译的正则表达式模式及其描述分组将使我能够有效地进行搜索。以下是我的代码的关键部分:
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
当我没有“implicit val regexMetadataEncoder”行时,它编译并运行良好。这似乎适用于 Databricks,但不适用于 AWS Glue。
一些搜索发现了这些类似的问题,但我无法用它们解决我的问题:
scala generic encoder for spark case class
感谢您的帮助!
【问题讨论】:
标签: regex scala apache-spark aws-glue encoder