Сделать RDD из класса - PullRequest
       16

Сделать RDD из класса

3 голосов
/ 18 июня 2019

Я могу создать RDD, если у меня есть список и выполнять необходимые операции, как

val li = List(1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 4, 5, 6, 7, 8)
val rdd = sc.parallelize(li, 5)
val rddm =rdd.map(x =>x * 2).map(println(_)).collect()

Но когда я пытаюсь создать RDD из класса, выдается ошибка, указывающая объект, не сериализуемый (класс: BAT1, значение: BAT1 @ 78f84d5) . Мой код

object sparkBAT {
 def main(args: Array[String]): Unit = {
 val N = 10
 val d = 5
 val MinVal = -10
 val MaxVal =  10
 val conf = new  SparkConf().setMaster(locally("local")).setAppName("spark Demo")
 val sc = new SparkContext(conf)

 val ba = List.fill(N)(new BAT(d, MinVal, MaxVal))

 val rdd = sc.parallelize(ba, 5)
 rdd.map(x=> (x.BestFitness ,(x.fitness,x.position))).take(5)
 rdd.mapPartitions( y => y.map{x => println(x.position, x.fitness)})
 }
}
class BAT ( dim:Int  ,  min:Double  ,  max:Double){
val random = new Random()
var position      : List[Double]      =   List.fill(dim) (random.nextDouble() * (max-min)+min )
var velocity      :List[Double]       =   List.fill(dim)( math.random)
var PulseRate     : Double            =   0.1
var LoudnessRate  :Double             =   0.95
var frequency     :Double             =   math.random
var fitness       :Double             =   math.random
var BestPosition  :List[Double]       =   List.fill(dim)(math.random)
var BestFitness   :Double             =   math.random 
}

Как я могу создать RDD из BAT класса?

...