Redis
 sql >> Base de Dados >  >> NoSQL >> Redis

O foreach do Azure DataBricks Stream falha com NotSerializableException


O Spark Context não é serializável.

Qualquer implementação de ForeachWriter deve ser serializável porque cada tarefa obterá uma nova cópia serializada-desserializada do objeto fornecido. Portanto, é altamente recomendável que qualquer inicialização para escrever dados (por exemplo, abrir uma conexão ou iniciar uma transação) seja feita após a chamada do método open(...), o que significa que a tarefa está pronta para gerar dados.

No seu código, você está tentando usar o contexto spark no método do processo,
override def process(record: Row) = {
    val stringHashRDD = sc.parallelize(Seq(("lastContact", record(1).toString)))
    *sc.toRedisHASH(stringHashRDD, record(0).toString)(redisConfig)*
  }

Para enviar dados para o redis, você precisa criar sua própria conexão e abri-la no método open e depois usá-la no método process.

Dê uma olhada em como criar um pool de conexões redis. https://github.com/RedisLabs/spark-redis/blob/master/src/main/scala/com/redislabs/provider/redis/ConnectionPool.scala