regex - 任务不可序列化 - 正则表达式

标签 regex scala apache-spark

我有一部电影,有一个标题。这个标题中是电影的年份,如“电影(年)”。我想提取年份,为此我使用正则表达式。

case class MovieRaw(movieid:Long,genres:String,title:String)
case class Movie(movieid:Long,genres:Set[String],title:String,year:Int)
val regexYear = ".*\\((\\d*)\\)".r
moviesRaw.map{case MovieRaw(i,g,t) => Movie(i,g,t,t.trim() match { case regexYear(y) => Integer.parseInt(y)})}

执行最后一个命令时,出现以下错误:

java.io.NotSerializedException:org.apache.spark.SparkConf

使用以下 SparkContext 在 Spark/Scala REPL 中运行: val conf = new SparkConf(true).set("spark.cassandra.connection.host", "localhost") val sc = 新 SparkContext(conf)

最佳答案

正如 Dean 所解释的,问题的原因是 REPL 从添加到 REPL 的代码中创建了一个类,在这种情况下,同一上下文中的其他变量被闭包中的“拉”正则表达式声明。

鉴于您创建上下文的方式,避免序列化问题的一个简单方法是声明 SparkConfSparkContext transient :

@transient val conf = new SparkConf(true).set("spark.cassandra.connection.host", "localhost")
@transient val sc = new SparkContext(conf)

您甚至不需要在 REPL 中重新创建 Spark 上下文,其唯一目的就是连接到 Cassandra:

spark-shell --conf spark.cassandra.connection.host=localhost

关于regex - 任务不可序列化 - 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30032387/

相关文章:

java - 为基于云的构建和部署管理 paypal-api 凭据的好方法是什么?

scala - 嵌套数据中深叶上的 FP 或类型级别工具 groupBy?

scala - 是否可以/建议对 Akka 2 Actor 的不同 child 采取不同的监督策略?

python - 如何使用 approx_count_distinct 计算 Spark DataFrame 中两列的不同组合?

java - 组合字符串中的正则表达式数字和点(点)

regex - 将 url(r'^(?P<pk>[-\w]+)/$') 解码为 Django 中的 path()

python - Apache Spark PySpark 连接到 MSSQL 数据库 JDBC

apache-spark - 加载 Parquet 文件并保留相同数量的hdfs分区

regex - 如何将 www 放在 htaccess 中的 wordpress 站点 url 前面?

regex - 删除以特定字符开头和结尾的任何子字符串