Redis
 sql >> Database >  >> NoSQL >> Redis

Il flusso di Azure DataBricks foreach non riesce con NotSerializableException

Spark Context non è serializzabile.

Qualsiasi implementazione di ForeachWriter deve essere serializzabile perché ogni attività riceverà una nuova copia serializzata e deserializzata dell'oggetto fornito. Pertanto, si consiglia vivamente di eseguire qualsiasi inizializzazione per la scrittura di dati (ad esempio l'apertura di una connessione o l'avvio di una transazione) dopo che è stato chiamato il metodo open(...), il che significa che l'attività è pronta per generare dati.

Nel tuo codice, stai tentando di utilizzare il contesto spark all'interno del metodo di processo,

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

Per inviare dati a redis, devi creare la tua connessione e aprirla nel metodo aperto e quindi utilizzarla nel metodo di elaborazione.

Dai un'occhiata a come creare un pool di connessioni redis. https://github.com/RedisLabs/spark-redis/blob/master/src/main/scala/com/redislabs/provider/redis/ConnectionPool.scala