Kontekstu Spark nie można serializować.
Każda implementacja ForeachWriter musi być możliwa do serializacji, ponieważ każde zadanie otrzyma świeżą zserializowaną, zdeserializowaną kopię dostarczonego obiektu. Dlatego zdecydowanie zaleca się, aby inicjalizacja do zapisu danych (np. otwarcie połączenia lub rozpoczęcie transakcji) była wykonywana po wywołaniu metody open(...), co oznacza, że zadanie jest gotowe do wygenerowania danych.
W swoim kodzie próbujesz użyć kontekstu iskry w metodzie procesu,
override def process(record: Row) = {
val stringHashRDD = sc.parallelize(Seq(("lastContact", record(1).toString)))
*sc.toRedisHASH(stringHashRDD, record(0).toString)(redisConfig)*
}
Aby wysłać dane do redis, musisz utworzyć własne połączenie i otworzyć je w metodzie otwartej, a następnie użyć w metodzie procesowej.
Zobacz, jak utworzyć pulę połączeń redis. https://github.com/RedisLabs/spark-redis/blob/master/src/main/scala/com/redislabs/provider/redis/ConnectionPool.scala