Spark Context не може да се сериализира.
Всяка реализация на ForeachWriter трябва да може да бъде сериализирана, защото всяка задача ще получи ново сериализирано-десериализирано копие на предоставения обект. Следователно, силно се препоръчва всяка инициализация за запис на данни (например отваряне на връзка или стартиране на транзакция) да се извършва след извикване на метода open(...), което означава, че задачата е готова да генерира данни.
Във вашия код се опитвате да използвате Spark контекст в метода на процеса,
override def process(record: Row) = {
val stringHashRDD = sc.parallelize(Seq(("lastContact", record(1).toString)))
*sc.toRedisHASH(stringHashRDD, record(0).toString)(redisConfig)*
}
За да изпратите данни към redis, трябва да създадете своя собствена връзка и да я отворите в отворения метод и след това да я използвате в метода на процеса.
Вижте как да създадете пул за връзки на Redis. https://github.com/RedisLabs/spark-redis/blob/master/src/main/scala/com/redislabs/provider/redis/ConnectionPool.scala