spark sql on hive笔记一

Spark sql on Hive非常方便,通过共享读取hive的元数据,我们可以直接使用spark sql访问hive的库和表,做更快的OLAP的分析。

spark 如果想直接能集成sql,最好自己编译下源码:

切换scala的版本为新版本
dev/change-scala-version.sh 2.11编译支持hive
mvn -Pyarn -Phive  -Phive-thriftserver -Phadoop-2.7.3 -Dscala-2.11 -DskipTests clean package

注意,spark sql 可以直接在Linux上使用,像执行hive命令一样,进入交互式终端,进行即席查询,进入spark-sql交互式终端命令,并指定以yarn的模式运行:

spark/bin/spark-sql  --master yarn

本次使用的spark2.0.2,进入交互式终端之后,可以进行任意的查询分析,但本文的笔记例子,不是基于终端的spark sql分析,而是在Scala中使用spark sql on hive,在编程语言里面使用spark sql on hive 灵活性大大提供,能做更多的事情,比如说分析完的结果存储到MySQLHbase或者Redis里面,或者分析的过程,需要外部存储的一些数据等等。

开发程序是在IDEA里面写的,项目风格是Java+scala混搭采用maven管理,注意不是全scala项目,没有用sbt管理,sbt的国内下载非常慢,能翻墙的同学可以尝试一下。

功能: 使用spark sql读取hive的数据,然后根据某个字段分组,并收集分组结果,然后存储到redis里面。

def main(args: Array[String]): Unit = {    
    val t0=System.nanoTime();//开始时间
    val spark=SparkSession
       .builder()
        .appName("spark on sql hive  ")
       .enableHiveSupport().getOrCreate();//激活hive支持

    
    import spark.implicits._   
    import spark.sql
    sql(" use db")//切换db
    //注意,collect_set 可以收集分组结果
    val ds=sql("select q_id, collect_set(kp_id) as ids from ods_q_quest_kp_rel where kp_id!=0  group by q_id");
    ds.cache();//cache起来,便于后续使用
    println("size:",ds.collect().length)//打印长度
    ds.select("q_id","ids").collect().foreach (
      t =>
      {        val key=t.getAs[String]("q_id");//获取上面的列映射
        val value=t.getAs[Seq[String]]("ids").mkString(",");//获取上面的分组集合
        //insert redis
      }
    )    val t1=System.nanoTime();
    
    println("insert redis ok! Elapsed time: " + (t1 - t0)/1000/1000 + "ms")    //停止
    spark.stop();

  }

原文发布于微信公众号 - 我是攻城师(woshigcs)

原文发表时间:2016-12-09

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏企鹅号快讯

高并发分布式——主节点选举

1. 概述 本文主要分享 Elastic-Job-Lite 主节点选举。 涉及到主要类的类图如下: ? . 2. 为什么需要选举主节点 首先我们来看一段官方对 ...

2539
来自专栏抠抠空间

网络爬虫之scrapy框架设置代理

1443
来自专栏逸鹏说道

小解Redis 系列

官网:http://redis.io/ 推荐一个开源组件:StackExchange.Redis https://github.com/StackExchang...

2999
来自专栏酷玩时刻

前端后台以及游戏中使用google-protobuf详解

protoBuf是一种灵活高效的独立于语言平台的结构化数据表示方法,与XML相比,protoBuf更小更快更简单。你可以用定义自己protoBuf的数据结构,用...

2422
来自专栏存储

建立本地的Blast数据库

Blast(basic local alignment search tool) 局部序列比对基本检索工具,是NCBI开发的一款基于序列相似性的数据库搜索程序。...

5009
来自专栏Java3y

多线程三分钟就可以入个门了!

25611
来自专栏同步博客

Memcache存储机制与指令汇总

  memcached是高性能的分布式内存缓存服务器。一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。

882
来自专栏大内老A

提供第三种代码生成方式——通过自定义BuildProvider为ASP.NET提供代码生成

之前写了一些关于代码生成的文章,提供了两种不同方式的代码生成解决方案,即CodeDOM+Custom Tool和T4。对于ASP.NET应用,你还有第三种选择—...

22310
来自专栏Java3y

Servlet第六篇【Session介绍、API、生命周期、应用、与Cookie区别】

什么是Session Session 是另一种记录浏览器状态的机制。不同的是Cookie保存在浏览器中,Session保存在服务器中。用户使用浏览器访问服务器的...

5265
来自专栏前端杂谈

vue使用Axios做ajax请求

48212

扫码关注云+社区

领取腾讯云代金券