Spark Context kan ikke serialiseres.
Enhver implementering af ForeachWriter skal kunne serialiseres, fordi hver opgave vil få en ny serialiseret-deserialiseret kopi af det leverede objekt. Derfor anbefales det kraftigt, at enhver initialisering til skrivning af data (f.eks. åbning af en forbindelse eller start af en transaktion) udføres, efter at den åbne(...) metode er blevet kaldt, hvilket betyder, at opgaven er klar til at generere data.
I din kode forsøger du at bruge gnistkontekst inden for procesmetoden,
override def process(record: Row) = {
val stringHashRDD = sc.parallelize(Seq(("lastContact", record(1).toString)))
*sc.toRedisHASH(stringHashRDD, record(0).toString)(redisConfig)*
}
For at sende data til redis skal du oprette din egen forbindelse og åbne den i den åbne metode og derefter bruge den i procesmetoden.
Tag et kig på, hvordan du opretter redis-forbindelsespulje. https://github.com/RedisLabs/spark-redis/blob/master/src/main/scala/com/redislabs/provider/redis/ConnectionPool.scala