sql >> Database >  >> NoSQL >> Redis

Azure DataBricks Stream foreach mislukt met NotSerializableException

Spark Context is niet serialiseerbaar.

Elke implementatie van ForreachWriter moet serialiseerbaar zijn omdat elke taak een nieuwe, geserialiseerde-gedeserialiseerde kopie van het geleverde object krijgt. Daarom wordt het ten zeerste aanbevolen dat elke initialisatie voor het schrijven van gegevens (bijvoorbeeld het openen van een verbinding of het starten van een transactie) wordt uitgevoerd nadat de methode open(...) is aangeroepen, wat betekent dat de taak klaar is om gegevens te genereren.

In uw code probeert u Spark-context te gebruiken binnen de procesmethode,

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

Om gegevens naar redis te verzenden, moet u uw eigen verbinding maken en deze openen in de open-methode en deze vervolgens gebruiken in de procesmethode.

Bekijk hoe u een redis-verbindingspool maakt. https://github.com/RedisLabs/spark-redis/blob/master/src/main/scala/com/redislabs/provider/redis/ConnectionPool.scala




  1. Redis:Is ZADD beter dan O(logN) wanneer het ingevoegde element aan het begin of het einde staat?

  2. sudo service mongodb herstart geeft niet-herkende servicefout in ubuntu 14.0.4

  3. Het beste patroon voor het afhandelen van asynchrone looping in Node.js

  4. Redis start handmatig met init.d maar niet bij het opstarten