当前位置: 首页 > 知识库问答 >
问题:

Spark Scala:任务不可序列化错误

弓俊晖
2023-03-14
def removePunctuation(text: String): String = {
  val punctPattern = "[^a-zA-Z0-9\\s]".r
  punctPattern.replaceAllIn(text, "").toLowerCase
}
val myfile = sc.textFile("/home/ubuntu/data.txt",4).map(removePunctuation)

这给出的错误如下,任何帮助将是感激的:

共有1个答案

竺翰海
2023-03-14

正如@tgaweda所建议的,Spark的serializationdebugger对于识别“从给定对象到问题对象的序列化路径”非常有帮助。堆栈跟踪中“序列化堆栈”之前的所有美元符号都表明您的方法的容器对象是问题所在。

虽然在容器类上添加serializable是最简单的,但我更喜欢利用Scala是函数语言这一事实,并将函数作为第一类公民使用:

sc.textFile("/home/ubuntu/data.txt",4).map { text =>
  val punctPattern = "[^a-zA-Z0-9\\s]".r
  punctPattern.replaceAllIn(text, "").toLowerCase
}

或者如果你真的想把事情分开:

val removePunctuation: String => String = (text: String) => {
  val punctPattern = "[^a-zA-Z0-9\\s]".r
  punctPattern.replaceAllIn(text, "").toLowerCase
}
sc.textFile("/home/ubuntu/data.txt",4).map(removePunctuation)
 类似资料:
  • 我对Spark,Scala和Cassandra都是新手。使用Spark,我试图从MySQL获取一些ID。 我可以看到在控制台打印的ID。 当我试图在每个提取id上运行相同的函数时 它给出与例外相同的例外 在阅读spark-shell中的Apache spark:“sparkException:Task not serializable”后,我尝试将@transient添加到RDDs中

  • null 每当我尝试访问sc时,我会得到以下错误。我在这里做错了什么?

  • 我的spark任务是在运行时抛出不可序列化的任务。谁能告诉我我做错了什么吗? 以下是stacktrace:

  • 以下代码出现“任务不可序列化”错误? 错误 代码: 更新: 我将调用更改为以下内容, 现在我得到了错误的答案

  • 问题内容: 我们在Spark上使用Redis来缓存键值对,这是代码: 但是编译器给了我这样的反馈: 有人可以告诉我如何序列化从Redis获得的数据。非常感谢。 问题答案: 在Spark中,s(如此处)上的函数被序列化并发送给执行程序进行处理。这意味着这些操作中包含的所有元素都应该可序列化。 Redis连接不可序列化,因为它打开了到目标DB的TCP连接,该TCP连接已绑定到创建它的机器。 解决方案是

  • 我已经上了三节课 任务未序列化