SparkContextはシリアル化できません。
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に送信するには、独自の接続を作成し、openメソッドで開いてから、processメソッドで使用する必要があります。
redis接続プールを作成する方法を見てみましょう。 https://github.com/RedisLabs/spark-redis/blob/master/src/main/scala/com/redislabs/provider/redis/ConnectionPool.scala