如何通过使用Redis作为查找表并使用kafka作为输入源在Spark结构化流中进行查找

时间:2019-04-10 04:38:44

标签: redis apache-kafka spark-structured-streaming

我的要求是从kafka读取json对象,并为每条记录在redis缓存中查找并将丰富的数据保存到mongo db。 我能够以结构化流的形式从kafka读取数据,还能够将数据保存到mongo db,但是 我无法在结构化流中进行Redis查找。 Spark版本-2.4.1 使用spark-redis连接器-com.redislabs.provider.redis

到目前为止,在执行查找之前,我将完整的redis缓存放入数据集中,并将其持久化并使用join进行查找。这种方法效果很好,但是我的redis缓存是动态的,可以随时更改。

---现有代码将Redis缓存加载到静态数据集中

val redisServer = "127.0.0.1"

val redisPortNum = 6379

val redisConfig = new    RedisConfig(RedisEndpoint(redisServer,redisPortNum))

val keysRDD = spark.sparkContext.fromRedisKeyPattern(DeviceID, 5)(redisConfig)

val keyValueRDD = keysRDD.getKV

val redisCache = keyValueRDD.toDF

sample inp :(从json中提取字段)

设备ID,速度

ahjhfhru12,100

redis缓存(动态,可以随时更改)

设备ID,设备名称,速度限制

ahjhfhru12,test,50

输出(将保存到mongo db):

设备ID,速度,设备名称,速度限制

ahjhfhru12,50,test,100

对于每条记录,我都希望在redis中进行查找以获取更新的信息,并用缓存数据丰富输入数据,而我只想进行这种火花结构化的流传输。

有人可以帮助我如何在结构化流中进行动态查找吗?

0 个答案:

没有答案