加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – Spark任务不可序列化(Case Classes)

发布时间:2020-12-16 18:36:11 所属栏目:安全 来源:网络整理
导读:当我使用在闭包内扩展Serializable的case类或类/对象时,Spark throws Task不可序列化. object WriteToHbase extends Serializable { def main(args: Array[String]) { val csvRows: RDD[Array[String] = ... val dateFormatter = DateTimeFormat.forPattern(
当我使用在闭包内扩展Serializable的case类或类/对象时,Spark throws Task不可序列化.

object WriteToHbase extends Serializable {
    def main(args: Array[String]) {
        val csvRows: RDD[Array[String] = ...
        val dateFormatter = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss")
        val usersRDD = csvRows.map(row => {
            new UserTable(row(0),row(1),row(2),row(9),row(10),row(11))
        })
        processUsers(sc: SparkContext,usersRDD,dateFormatter)
    })
}

def processUsers(sc: SparkContext,usersRDD: RDD[UserTable],dateFormatter: DateTimeFormatter): Unit = {

    usersRDD.foreachPartition(part => {

        val conf = HBaseConfiguration.create()
        val table = new HTable(conf,tablename)

        part.foreach(userRow => {
            val id = userRow.id
            val date1 = dateFormatter.parseDateTime(userRow.date1)
        })
        table.flushCommits()
        table.close()
    })
}

我的第一次尝试是使用案例类:

case class UserTable(id: String,name: String,address: String,...) extends Serializable

我的第二次尝试是使用一个类而不是一个case类:

class UserTable (val id: String,val name: String,val addtess: String,...) extends Serializable {
}

我的第三次尝试是在课堂上使用伴侣对象:

object UserTable extends Serializable {
    def apply(id: String,...) = new UserTable(id,name,address,...)
}

解决方法

很可能函数“doSomething”是在你的类上定义的,不能用于serilizable.而是将“doSomething”功能移动到伴侣对象(例如,将其设为静态).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读