Spark Context is niet serialiseerbaar.
Elke implementatie van ForreachWriter moet serialiseerbaar zijn omdat elke taak een nieuwe, geserialiseerde-gedeserialiseerde kopie van het geleverde object krijgt. Daarom wordt het ten zeerste aanbevolen dat elke initialisatie voor het schrijven van gegevens (bijvoorbeeld het openen van een verbinding of het starten van een transactie) wordt uitgevoerd nadat de methode open(...) is aangeroepen, wat betekent dat de taak klaar is om gegevens te genereren.
In uw code probeert u Spark-context te gebruiken binnen de procesmethode,
override def process(record: Row) = {
val stringHashRDD = sc.parallelize(Seq(("lastContact", record(1).toString)))
*sc.toRedisHASH(stringHashRDD, record(0).toString)(redisConfig)*
}
Om gegevens naar redis te verzenden, moet u uw eigen verbinding maken en deze openen in de open-methode en deze vervolgens gebruiken in de procesmethode.
Bekijk hoe u een redis-verbindingspool maakt. https://github.com/RedisLabs/spark-redis/blob/master/src/main/scala/com/redislabs/provider/redis/ConnectionPool.scala