Spark Context không thể tuần tự hóa.
Mọi triển khai của ForeachWriter phải có thể tuần tự hóa vì mỗi tác vụ sẽ nhận được một bản sao được tuần tự hóa mới của đối tượng được cung cấp. Do đó, chúng tôi đặc biệt khuyến nghị rằng bất kỳ quá trình khởi tạo nào để ghi dữ liệu (ví dụ:mở kết nối hoặc bắt đầu giao dịch) được thực hiện sau khi phương thức open (...) đã được gọi, điều này cho biết rằng tác vụ đã sẵn sàng để tạo dữ liệu.
Trong mã của bạn, bạn đang cố gắng sử dụng ngữ cảnh tia lửa trong phương thức quy trình,
override def process(record: Row) = {
val stringHashRDD = sc.parallelize(Seq(("lastContact", record(1).toString)))
*sc.toRedisHASH(stringHashRDD, record(0).toString)(redisConfig)*
}
Để gửi dữ liệu đến redis, bạn cần tạo kết nối của riêng mình và mở nó trong phương thức mở, sau đó sử dụng nó trong phương thức xử lý.
Hãy xem cách tạo nhóm kết nối redis. https://github.com/RedisLabs/spark-redis/blob/master/src/main/scala/com/redislabs/provider/redis/ConnectionPool.scala