Scala / Spark可序列化错误 - 加入不起作用

时间:2017-06-16 13:46:19

标签: scala apache-spark serialization rdd

我正在尝试在2 RDD之间使用join方法并将其保存到cassandra但我的代码不起作用。在开始时,我得到一个巨大的主方法,一切运作良好,但当我使用函数和类时,这不起作用。我是scala和spark的新手

代码是:

  class Migration extends Serializable { 

  case class userId(offerFamily: String, bp: String, pdl: String) extends Serializable
  case class siteExternalId(site_external_id: Option[String]) extends Serializable
  case class profileData(begin_ts: Option[Long], Source: Option[String]) extends Serializable

  def SparkMigrationProfile(sc: SparkContext) = {

    val test  = sc.cassandraTable[siteExternalId](KEYSPACE,TABLE)
     .keyBy[userId]
     .filter(x => x._2.site_external_id != None)

    val profileRDD = sc.cassandraTable[profileData](KEYSPACE,TABLE)
    .keyBy[userId]

    //dont work
   test.join(profileRDD)
    .foreach(println)

    // don't work
     test.join(profileRDD)
     .saveToCassandra(keyspace, table)

   }

在开始时我得到了着名的:线程“main”中的异常org.apache.spark.SparkException:任务不可序列化。 。 。 所以我扩展了我的主类和案例类,但stil不起作用。

1 个答案:

答案 0 :(得分:0)

我认为您应该将案例类从Migration类移动到专用文件和/或对象。这应该可以解决您的问题。此外,默认情况下,Scala案例类是可序列化的。