在Spark中运行udf时出现“java.lang.ClassCastException”错误

时间:2017-09-07 13:24:06

标签: scala maven apache-spark intellij-idea

我一直试图解决这个问题几天,但没有得到任何结果 - 会喜欢一些建议。

我正在项目中运行一个scala对象,其中包含一个广播scala集(dict)的udf。这是从IntelliJ IDE运行的,项目是用Maven构建的

现在,当我在同一个项目中包含的另一个对象(在数据帧中使用虚拟数据)中运行它时,这个udf运行正常,但是当我在数据帧中的实际数据上运行相同的代码时,我得到{{1错误。

关键的udf代码是:

java.lang.ClassCastException

我认为它可能是spark或scala版本不匹配错误,但已检查我的pom文件以确保所有版本都正确并已从maven存储库重新下载它们。

真正做到这一点的是,它使用精确的SAME项目设置(相同的pom文件和依赖项,所有上传到spark作为带有依赖项的胖jar)在虚拟数据上运行,而不在真实数据上运行)。在真实的数据代码中有额外的代码可以抓取和管理数据(并且工作得很好),但是当它涉及到完全相同的udf时会失败 - 这怎么可能?

完整的错误堆栈是:

// does an exact match check against a set (Bool)
def listCheckExact(words: Broadcast[scala.collection.immutable.Set[String]]) = {
  udf { (s: String) => words.value.contains(s) }
}

df.withColumn("new_col", when(listCheckExact(sparkSession.sparkContext.broadcast(dict))($"column"), 1).otherwise(0) )

0 个答案:

没有答案