sql >> Base de Datos >  >> NoSQL >> Redis

Azure DataBricks Stream foreach falla con NotSerializableException

Spark Context no es serializable.

Cualquier implementación de ForeachWriter debe ser serializable porque cada tarea obtendrá una nueva copia serializada-deserializada del objeto proporcionado. Por lo tanto, se recomienda encarecidamente que cualquier inicialización para escribir datos (por ejemplo, abrir una conexión o iniciar una transacción) se realice después de que se haya llamado al método open(...), lo que significa que la tarea está lista para generar datos.

En su código, está tratando de usar un contexto de chispa dentro del método de proceso,

override def process(record: Row) = {
    val stringHashRDD = sc.parallelize(Seq(("lastContact", record(1).toString)))
    *sc.toRedisHASH(stringHashRDD, record(0).toString)(redisConfig)*
  }

Para enviar datos a redis, debe crear su propia conexión y abrirla en el método abierto y luego usarla en el método de proceso.

Eche un vistazo a cómo crear un grupo de conexiones redis. https://github.com/RedisLabs/spark-redis/blob/master/src/main/scala/com/redislabs/provider/redis/ConnectionPool.scala