Spark-Redis的使用
Posted DataRain
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spark-Redis的使用相关的知识,希望对你有一定的参考价值。
上一集记录了下Redis的常用命令行,对Redis数据结构也记录了一下,这是为介绍Spark-Redis这个包的简介做个铺垫。这个包提供了spark操作Redis的方法,支持rdd写入到Redis中,也支持读取Redis中的数据生成rdd来使用。这个包支持spark-shell的方式来使用,也支持java api,这里看看java api是怎么调用的,首先需要maven引入:
<dependency>
<groupId>com.redislabs</groupId>
<artifactId>spark-redis_2.11</artifactId>
<version>2.4.2</version>
</dependency>
具体操作Redis是通过RedisContext对象来完成的,需要通过SparkContest来构造这个对象,结合RedisConfig中的Redis端点信息就可以读写Redis中的数据。
// redis的ip
String host = 192.168.0.1;
// redis的端口
int port = 6379;
// redis连接的db
int dbNum = 1;
// redis连接超时参数
int timeOut = 2000;
// 初始化redisConfig
RedisEndpoint redisEndpoint = new RedisEndpoint(host,port,auth,dbNum,timeOut);
RedisConfig redisConfig = new RedisConfig(redisEndpoint);
// 初始化redisContext
RedisContext redisContext = new RedisContext(sparkContext);
// 获取redis数据时RDD分区数量
int partitionNum = 3;
// 写入redis数据时,该数据的过期时间,0则为永不过时
int ttl = 0;
// 需要查询 key
String key = "test";
// 获取String类型数据
RDD<Tuple2<String, String>> kvRdd = redisContext.fromRedisKV(keyPattern, partitionNum, redisConfig);
// 写入String类型数据
redisContext.toRedisKV(kvRdd, ttl, redisConfig);
// 获取hash类型数据
RDD<Tuple2<String, String>> hashRdd = redisContext.fromRedisHash(keyPattern, partitionNum, redisConfig);
// 写入hash类型数据
redisContext.toRedisHASH(hashRdd , key, ttl, redisConfig);
// 获取list类型数据
RDD<String> listRdd = redisContext.fromRedisList(keyPattern, partitionNum, redisConfig);
// 写入list类型数据
redisContext.toRedisLIST(listRdd , key, ttl, redisConfig);
// 获取set类型数据
RDD<String> setRdd = redisContext.fromRedisSet(keyPattern, partitionNum, redisConfig);
// 写入set类型数据
redisContext.toRedisSET(setRdd , key, ttl, redisConfig);
从上面看这个Spark-Redis主要通过一个很方便的入口去大批量的读取、写入Redis数据并转换为RDD,使用java api的话需要将这个RDD转为javaRDD,并且对于hash结构的数据读取后并不会自动转换为pairRDD,需要我们进一步对Tuple<String,String>类型的RDD进行处理。
以上是关于Spark-Redis的使用的主要内容,如果未能解决你的问题,请参考以下文章