前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >spark sql on hive笔记一

spark sql on hive笔记一

作者头像
我是攻城师
发布2018-05-14 17:04:26
1.1K0
发布2018-05-14 17:04:26
举报

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();

  }
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-12-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 我是攻城师 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档