SparkStreaming03

SparkStreaming03

高德地图逆地理转码

package com.hpznyf.HTTPApp

import com.alibaba.fastjson.JSON
import org.apache.http.client.methods.HttpGet
import org.apache.http.impl.client.HttpClients
import org.apache.http.util.EntityUtils

object HttpClientApp {
  def main(args: Array[String]): Unit = {

    val longtitude = 116.480881
    val latitude = 39.989410

    val key = ""
    val url = s"https://restapi.amap.com/v3/geocode/regeo?key=${key}&location=$longtitude,$latitude"

    val httpClient = HttpClients.createDefault()
    val httpGet = new HttpGet(url)
    val response = httpClient.execute(httpGet)


    try{
      val status = response.getStatusLine.getStatusCode
      val entity = response.getEntity

      if(status == 200 ){
        val result = EntityUtils.toString(entity)
        val json = JSON.parseObject(result)

        val regeocode = json.getJSONObject("regeocode")
        if(regeocode != null){
          val addressComponent = regeocode.getJSONObject("addressComponent")
          val province = addressComponent.getString("province")
          println(province)
        }


      }
    }catch {
      case e : Exception => e.printStackTrace()
    }
  }
}

sparkstreaming 解析ip

import com.alibaba.fastjson.JSON
import org.apache.http.client.methods.HttpGet
import org.apache.http.impl.client.{CloseableHttpClient, HttpClients}
import org.apache.http.util.EntityUtils
import org.apache.spark.SparkConf
import org.apache.spark.internal.Logging
import org.apache.spark.sql.SparkSession
import org.apache.spark.streaming.{Seconds, StreamingContext}

/**
 * pk,111111,116.480881,39.989410
 * ruoze,22222,116.480881,39.989410
 */
object HttpStreamingApp extends Logging{
  def main(args: Array[String]): Unit = {
    val sparkconf = new SparkConf().setAppName(this.getClass.getCanonicalName).setMaster("local[2]")
    val ssc = new StreamingContext(sparkconf, Seconds(5))

    val lines = ssc.socketTextStream("hadoop001", 9527)

    lines.foreachRDD(rdd => {
      if(!rdd.isEmpty()){
        rdd.foreachPartition(partition => {

          //开启连接
          val httpClient = HttpClients.createDefault()
          logError("----------------" + httpClient)

          //数据清洗功能
          partition.foreach( x => {
            val splits = x.split(",")
            val userId = splits(0)
            val time = splits(1)
            val longtitude = splits(2).toDouble
            val latitude = splits(3).toDouble

            val key = ""
            val url = s"https://restapi.amap.com/v3/geocode/regeo?key=${key}&location=$longtitude,$latitude"

            var province = ""
            var regeocode:CloseableHttpClient = null
            try{
              val httpGet = new HttpGet(url)
              val response = httpClient.execute(httpGet)

              val status = response.getStatusLine.getStatusCode
              val entity = response.getEntity

              if(status == 200 ){
                val result = EntityUtils.toString(entity)
                val json = JSON.parseObject(result)

                val regeocode = json.getJSONObject("regeocode")
                if(regeocode != null){
                  val addressComponent = regeocode.getJSONObject("addressComponent")
                  val province = addressComponent.getString("province")
                  logError("/// " + province)
                }
              }
            }catch {
              case e : Exception => e.printStackTrace()
            }finally {
              if(regeocode != null){
                regeocode.close()
              }
            }
          })
        })
      }
    })

    ssc.start()
    ssc.awaitTermination()
  }
}


case class Access(userId:String, time:String, longtitude:Double, latitude:Double, province:String)

updateStateBykey

object StateApp {
  def main(args: Array[String]): Unit = {
    val sparkconf = new SparkConf().setAppName(this.getClass.getCanonicalName).setMaster("local[2]")
    val ssc = new StreamingContext(sparkconf, Seconds(5))
    ssc.checkpoint("data/checkpoint")
    val lines = ssc.socketTextStream("hadoop001", 9527)

    val result = lines.flatMap(_.split(","))
      .map((_,1)).updateStateByKey(updateFunction)

    result.print()

    ssc.start()
    ssc.awaitTermination()
  }

  def updateFunction(newValue: Seq[Int], preValues: Option[Int]) :Option[Int] ={

    val newCount = newValue.sum
    val pre = preValues.getOrElse(0)

    Some(newCount + pre)
  }
}

mapWithState

  def main(args: Array[String]): Unit = {
    val sparkconf = new SparkConf().setAppName(this.getClass.getCanonicalName).setMaster("local[2]")
    val ssc = new StreamingContext(sparkconf, Seconds(5))
    ssc.checkpoint("data/checkpoint")
    val lines = ssc.socketTextStream("hadoop001", 9527)

    val result = lines.flatMap(_.split(","))
      .map((_,1)).mapWithState(
      StateSpec.function(mappingFunc).timeout(Seconds(100))
    )

    result.print()

    ssc.start()
    ssc.awaitTermination()
  }
  val mappingFunc = (word: String, one:Option[Int], state:State[Int]) => {
    val sum = one.getOrElse(0) + state.getOption().getOrElse(0)
    val output = (word, sum)
    state.update(sum)
    output
  }

redis

redis.conf

port 16379
bind 0.0.0.0
	daemonize yes
	
	
	databases 16  不用改
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值