gpt4 book ai didi

object - 在多台机器上使用 spark-submit 运行 spark 项目时得到 "java.lang.NoClassDefFoundError"

转载 作者:行者123 更新时间:2023-12-05 07:43:10 26 4
gpt4 key购买 nike

我是 scala/spark 的初学者,在将我的代码运送到官方环境时卡住了。

简而言之,我不能将我的 SparkSession 对象放在类方法中,我不知道为什么?如果我这样做,当我在本地单机上运行它时会很好,但是当我将代码打包到单个 jar 文件并运行时抛出 java.lang.NoClassDefFoundError, Could not initialize class XXX它在多台机器上使用 spark-submit。

例如

当我把我的代码放在这样的结构中时

object Main{
def main(...){
Task.start
}
}

object Task{
case class Data(name:String, ...)
val spark = SparkSession.builder().appName("Task").getOrCreate()
import spark.implicits._

def start(){
var ds = loadFile(path)
ds.map(someMethod) // it dies here!
}

def loadFile(path:String){
spark.read.schema(...).json(path).as[Data]
}

def someMethod(d:Data):String{
d.name
}
}

它会在我将自定义方法放入那些数据集转换函数(如映射、过滤器...等)的每个地方给我“java.lang.NoClassDefFoundError”。

但是,如果我将其重写为

object Task{
case class Data(name:String, ...)

def start(){
val spark = SparkSession.builder().appName("Task").getOrCreate()
import spark.implicits._
var ds = loadFile(spark, path)
ds.map(someMethod) // it works!
}

def loadFile(spark:SparkSession, path:String){
import spark.implicits._
spark.read.schema(...).json(path).as[Data]
}

def someMethod(d:Data):String{
d.name
}
}

没问题,但这意味着我需要通过我需要它的每个方法传递“spark”变量,并且我需要编写 import spark.implicits._ 所有方法需要它的时候。

当 spark 尝试在节点之间移动我的对象时,我认为出了点问题,但我不知道原因究竟是什么,也不知道编写代码的正确方法是什么。

谢谢

最佳答案

不,您不需要传递 sparkSession 对象并在您需要的所有方法中导入 implicits。您可以将 sparkSession 变量作为函数外部的对象变量,并在所有函数中使用。

下面是你的代码的修改示例

object Main{
def main(args: Array[String]): Unit = {
Task.start()
}
}

object Task{

case class Data(fname:String, lname : String)
val spark = SparkSession.builder().master("local").appName("Task").getOrCreate()

import spark.implicits._

def start(){
var ds = loadFile("person.json")
ds.map(someMethod).show()

}

def loadFile(path:String): Dataset[Data] = {
spark.read.json(path).as[Data]
}

def someMethod(d:Data):String = {
d.fname
}
}

希望这对您有所帮助!

关于object - 在多台机器上使用 spark-submit 运行 spark 项目时得到 "java.lang.NoClassDefFoundError",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43929548/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com