Redis
 sql >> Base de données >  >> NoSQL >> Redis

Azure DataBricks Stream foreach échoue avec NotSerializableException

Spark Context n'est pas sérialisable.

Toute implémentation de ForeachWriter doit être sérialisable car chaque tâche recevra une nouvelle copie sérialisée-désérialisée de l'objet fourni. Par conséquent, il est fortement recommandé que toute initialisation pour écrire des données (par exemple, ouvrir une connexion ou démarrer une transaction) soit effectuée après l'appel de la méthode open(...), ce qui signifie que la tâche est prête à générer des données.

Dans votre code, vous essayez d'utiliser le contexte spark dans la méthode de processus,

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

Pour envoyer des données à redis, vous devez créer votre propre connexion et l'ouvrir dans la méthode open, puis l'utiliser dans la méthode process.

Découvrez comment créer un pool de connexions Redis. https://github.com/RedisLabs/spark-redis/blob/master/src/main/scala/com/redislabs/provider/redis/ConnectionPool.scala