IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> spark读取hive数据写入redis -> 正文阅读

[大数据]spark读取hive数据写入redis


import java.util

import org.apache.commons.pool2.impl.GenericObjectPoolConfig
import org.apache.spark.rdd.RDD
import org.apache.spark.sql.{DataFrame, SparkSession}
import redis.clients.jedis.{Jedis, JedisPool}
import redis.clients.util.Pool

import scala.collection.mutable.ArrayBuffer

/**
 * 创建时间:2022-02-23
 * 创建人: xiaotao
 * 数据流向:hiveToRedis
 * 需求:好书精讲专栏页(二期)
 * 专栏页,分类区,版单列表。服务端返回,10个讲书专辑类型的专辑。按专辑14天内的播放次数,由多到少倒叙排序。
 */
object GoodBookSpeakWellDateToRedis {

  private[this] var jedisPool: Pool[Jedis] = _

  /**
   * 创建redis连接池
   * @param host   地址
   * @param port   端口号
   * @param timeout 超时
   * @param password 密码
   */
  def init(host: String, port: Int, timeout: Int, password: String): Unit = {
    jedisPool = new JedisPool(new GenericObjectPoolConfig, host, port, timeout, password)
  }

  /**
   * 添加数据到zset中
   * @param key zset 的key
   * @param story_14d_play_cts score (14天内播放次数)
   * @param story_id value 专辑id
   */
  def zadd(key: String, story_14d_play_cts: Int, story_id: String): Unit = {
    val jedis = jedisPool.getResource
    jedis.zadd(key,story_14d_play_cts,story_id)
    jedis.close()
  }

  /**
   * 删除key中指定元素
   */
  def zrem(key: String,member :String): Unit ={
    val jedis = jedisPool.getResource
    jedis.zrem(key,member)
    jedis.close()
  }

  // 数据存入redis
  def getResultToRedis(spark: SparkSession): Unit = {

    val resultDataNew: DataFrame = spark.sql(
      """
        |select story_id
        |      ,cast(story_14d_play_cts as int) as story_14d_play_cts
        |from ads.ads_ks_log_story_play_hsjj_14h_sum_a_d
        |order by story_14d_play_cts desc
        |""".stripMargin)

    resultDataNew.show(20)

    val mapRDD: RDD[(String, Int)] = resultDataNew.rdd.map(row => (row.getString(0), row.getInt(1)))

    //今天的10条数据
    val nowDate: Array[(String,Int)] = mapRDD.collect()

    val jedis = jedisPool.getResource

    import scala.collection.JavaConversions._
    //昨天的redis中的10条数据
    val beforeDate: util.Set[String] = jedis.zrevrange("EXPLAIN_BOOK_ZS", 0, -1)
    jedis.close()

    //昨天和今天相同的album_id
    val sameDate = new ArrayBuffer[String]

    //今天相对于昨天不相同的album_id
    val nowNoSameDate = new ArrayBuffer[(String, Int)]

    //昨天相对于今天不相同的album_id
    val beforeNoSameDate: ArrayBuffer[String] = new ArrayBuffer[String]

    for(elem <- nowDate){
      if (beforeDate.contains(elem._1)){

        sameDate += elem._1
        zadd("EXPLAIN_BOOK_ZS",elem._2,elem._1)

      } else{

        nowNoSameDate += elem
      }
    }

    if(sameDate.length >0 & sameDate.length < 10) {
      for (elem <- beforeDate) {
        if (!sameDate.contains(elem)) {
          beforeNoSameDate += elem
        }
      }
    }else if(sameDate.length == 0){
      for(elem <- beforeDate){
        beforeNoSameDate += elem
      }
    }

    var i:Int = 0
    if(sameDate.length!=10){
      //删除一个添加一个
      while (i<=nowNoSameDate.length-1){
        zrem("EXPLAIN_BOOK_ZS",beforeNoSameDate(i))
        zadd("EXPLAIN_BOOK_ZS",nowNoSameDate(i)._2,nowNoSameDate(i)._1)
        i+=1
      }
    }
  }


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


    val spark = SparkSession.builder
      .appName("GoodBookSpeakWellDateToRedis")
           // .master("local[*]")
      .config("spark.driver.allowMultipleContexts", true)
      .config("hive.exec.dynamic.partition.mode", "nonstrict")
      .enableHiveSupport()
      .getOrCreate()

    spark.sparkContext.setLogLevel("ERROR")

    val password = ""
    val host = ""
    val port = 6379
    val timeout = 1000

    init(host, port, timeout, password)

    //数据存入redis
    getResultToRedis(spark)

    spark.stop()
  }
}

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-02-26 11:37:32  更:2022-02-26 11:41:27 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 11:29:28-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码