任务无法在community.cloud.databricks中序列化

时间:2019-10-06 14:55:02

标签: scala apache-spark databricks

Databricks社区云正在泛滥  org.apache.spark.SparkException: Task not serializable异常,表明我的本地计算机未抛出执行相同代码的情况。

该代码来自《 Spark in Action》一书。代码正在做的是读取带有github活动数据的json文件,然后从发明的公司读取带有员工用户名的文件,并最终通过推送次数对员工进行排名。

为了避免额外的改组,将广播包含员工列表的变量,但是,当其返回排名时,是数据砖社区云抛出异常的时间。

import org.apache.spark.sql.SparkSession
import scala.io.Source.fromURL

val spark = SparkSession.builder()
.appName("GitHub push counter")
.master("local[*]")
.getOrCreate()

val sc = spark.sparkContext

val inputPath = "/FileStore/tables/2015_03_01_0-a829c.json"
val pushes = spark.read.json(inputPath).filter("type = 'PushEvent'")
val grouped = pushes.groupBy("actor.login").count.orderBy(grouped("count").desc)

val empPath = "https://raw.githubusercontent.com/spark-in-action/first-edition/master/ch03/ghEmployees.txt"
val employees = Set() ++ (for { line <- fromURL(empPath).getLines} yield line.trim)

val bcEmployees = sc.broadcast(employees)

import spark.implicits._
val isEmp = user => bcEmployees.value.contains(user)
val isEmployee = spark.udf.register("SetContainsUdf", isEmp)
val filtered = ordered.filter(isEmployee($"login"))
filtered.show()

1 个答案:

答案 0 :(得分:1)

如果您有诸如雇员/用户之类的自定义类,则需要实现序列化接口。使用自定义用户对象时需要生成火花。

Task not serializable: java.io.NotSerializableException when calling function outside closure only on classes not objects