spark streaming + redis(geo)

项目支持实时,主要实时把数据存到redis中,并可以进行geo查询

环境(maven管理):

<dependency>
    <groupId>org.scala-lang</groupId>
    <artifactId>scala-library</artifactId>
    <version>2.10.6</version>
</dependency>

<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-core_2.10</artifactId> 
    <version>1.6.1</version>
</dependency><dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-client</artifactId> <version>2.6.4</version></dependency><dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-streaming_2.10</artifactId> <version>1.6.1</version>
</dependency><dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-streaming-kafka_2.10</artifactId> <version>1.6.1</version></dependency><dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.8.1</version></dependency>


代码如下:
import redis.clients.jedis.{JedisPoolConfig, JedisPool, Jedis}

/**
 * Created by Administrator on 2016/8/5.
 */
object RedisUtils {
  
  def getJedis(): Jedis={
    //jedis配置
    var pool: JedisPool = null
    val config: JedisPoolConfig = new JedisPoolConfig
    config.setMaxIdle(1000)
    config.setMaxTotal(10240)
    if (pool == null) {
      pool = new JedisPool(config, "192.168.199.7", 6379, 0, "123")
    }
    pool.getResource
  }
  

}







import org.apache.spark.{HashPartitioner, SparkConf}
import org.apache.spark.storage.StorageLevel
import org.apache.spark.streaming.dstream.{DStream, ReceiverInputDStream}
import org.apache.spark.streaming.kafka.KafkaUtils
import org.apache.spark.streaming.{Seconds, StreamingContext}

/**
 * Created by Administrator on 2016/8/4.
 */
object KafkaStreamingHandle {

  val updateFunc=(iter:Iterator[(String,Seq[Int],Option[Int])]) =>{
    iter.flatMap{case (x,y,z) => Some(y.sum+z.getOrElse(0)).map(i => (x,i))}
  }
  
  
  def main(args: Array[String]) {
    LoggerLevels.setStreamingLogLevels()
    //转入参数
    //zkQurnum,group,topic,numThreads
    //shizhanmini:2181,mini02:2181,mini03:2181 pp4 test3 2
    var Array(zkQurnum,group,topic,numThreads)=args
    //创建sparkconf  测试本地模式
    val sparkConf= new SparkConf().setAppName("ksh")
      .setMaster("local[2]")
    //创建流式处理对象
    val ssc= new StreamingContext(sparkConf,Seconds(3))
    ssc.checkpoint("c://ck2") 
    //将topic转为map
    val topicMap= topic.split(",").map((_,numThreads.toInt)).toMap
    //根据参数,创建Stream
    val lines= KafkaUtils.createStream(ssc,zkQurnum,group,topicMap,StorageLevel.MEMORY_AND_DISK).map(_._2)
    val users = lines.map(x => (x.split(",")(3),x.split(",")(7),x.split(",")(8)))
    
    users.print()
    users.foreachRDD(rdd => {
        rdd.foreachPartition(par =>{
          if(!par.isEmpty) {
            par.foreach(pair => {
              val qw= pair._1
              val vname = pair._2
              val ls = pair._3
              val lat=ls.split(" ")(0)
              val lon=ls.split(" ")(1)
             
            val jedis= RedisUtils.getJedis() 
              //                return jedis.eval("return redis.call('GEOADD',KEYS[1],KEYS[2],KEYS[3],KEYS[4])", 4, key, String.valueOf(longitude), String.valueOf(latitude), dName).asInstanceOf[Long]
              jedis.eval("return redis.call('GEOADD',KEYS[1],KEYS[2],KEYS[3],KEYS[4])",4,"Guangdong",String.valueOf(lat),String.valueOf(lon),vname)
            })
          }
        })
    })
      
    ssc.start()
    ssc.awaitTermination()
    
    
    
  }
}

只能做简单空间距离查询。希望能用上。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小努蛋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值