【问题标题】:Is it bad to put an RDD inside a Serializable Class?将 RDD 放在可序列化的类中是不是很糟糕?
【发布时间】:2019-12-06 21:45:28
【问题描述】:

根据this article,例如,当您在 RDD.map 中使用对象时,Spark 将首先序列化整个 ojbect。现在,让我们说,我有一个 RDD 定义为该可序列化类的成员。 Spark 会为该 RDD 做什么,它是否也会尝试对其进行序列化。如果有,怎么做?

以下是示例代码。

class SomeClass extends Serializable {
 var a: String
 var b: Int
 var rdd: RDD[...]

 ....
}

objectOfSomeClass = new SomeClass(...)
...
someRDD.map(x => someFunc(objectOfSomeClass))

【问题讨论】:

  • 它只会失败并告诉你对象不可序列化
  • 不,它没有。我一直在使用 RDD 作为成员变量,没有任何问题。我只是担心它是否会影响性能。只要不尝试在其他 RDD 中使用 RDD,就没有问题。就我而言,我只是使用该类的一些其他成员变量,而不是 RDD 的。我现在添加了一个示例。
  • Serializing RDD的可能重复

标签: scala apache-spark rdd


【解决方案1】:

回复:

我只是担心整个类的序列化是否还涉及其中的RDD的序列化。

您显示的代码不需要序列化整个对象。因此,直到现在您还没有遇到任何序列化问题。而不是分别传递ab,如果你传递objectOfSomeClass,那么我相信你会面临序列化问题。

在你的一条评论中你也提到了

我只是担心它是否会影响性能。

除非您对该 RDD 执行任何操作,否则这也不会出现。只有在对该 RDD 调用任何操作时,才会对 RDD 进行延迟评估。那是它将读取和运行转换的时间。在您的示例中,我没有看到任何操作,因此它不应该影响您的应用程序的性能。

希望这可以澄清您的一些疑问。

-阿米特

【讨论】:

  • 好的,假设我直接使用 objectOfSomeClass,Spark 将如何处理该类中的 RDD?
  • AFAIK,它应该会失败。您可以尝试一下并将其发回吗。这也有助于确认我们的理解。
  • @MetallicPriest 如果它符合您的期望并回答您提出的问题,您能否将其标记为答案。
猜你喜欢
  • 2012-02-25
  • 2010-10-18
  • 1970-01-01
  • 1970-01-01
  • 2015-10-29
  • 1970-01-01
  • 1970-01-01
  • 2011-09-20
  • 2018-01-20
相关资源
最近更新 更多