sql >> Databasteknik >  >> NoSQL >> Redis

Azure DataBricks Stream foreach misslyckas med NotSerializableException

Spark Context går inte att serialisera.

Alla implementeringar av ForeachWriter måste kunna serialiseras eftersom varje uppgift kommer att få en ny serialiserad-deserialiserad kopia av det angivna objektet. Därför rekommenderas det starkt att all initiering för att skriva data (t.ex. att öppna en anslutning eller starta en transaktion) görs efter att metoden open(...) har anropats, vilket betyder att uppgiften är redo att generera data.

I din kod försöker du använda sparkkontext inom processmetoden,

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

För att skicka data till redis måste du skapa din egen anslutning och öppna den i den öppna metoden och sedan använda den i processmetoden.

Ta en titt på hur du skapar redis-anslutningspool. https://github.com/RedisLabs/spark-redis/blob/master/src/main/scala/com/redislabs/provider/redis/ConnectionPool.scala




  1. Hur designar man redis pub/sub för ett snabbmeddelandesystem?

  2. Node.js fel Fel:Kan inte hitta modulen 'mongoose'

  3. MongoDB Whitespace-tecken

  4. Apache Hadoop Architecture – HDFS, YARN &MapReduce