`
qindongliang1922
  • 浏览: 2146398 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
7265517b-f87e-3137-b62c-5c6e30e26109
证道Lucene4
浏览量:116297
097be4a0-491e-39c0-89ff-3456fadf8262
证道Hadoop
浏览量:124566
41c37529-f6d8-32e4-8563-3b42b2712a50
证道shell编程
浏览量:58440
43832365-bc15-3f5d-b3cd-c9161722a70c
ELK修真
浏览量:70334
社区版块
存档分类
最新评论

spark sql 快速体验调试

阅读更多
spark sql提供了更快的查询性能,如何能够更快的体验,开发和调试spark sql呢?按照正规的步骤我们一般会集成hive,然后使用hive的元数据查询hive表进行操作,这样以来我们还需要考虑跟hive相关的东西,如果我们仅仅是学习spark sql查询功能,那么仅仅使用IDEA的IDE环境即可,而且能够在win上快速体验,不需要hive数据仓库,我们直接使用数组造点数据,然后转成DF,最后直接使用spark sql操作即可。

首先,看下pom文件的核心依赖:
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-sql_2.11</artifactId>
            <version>2.1.0</version>
        </dependency>


        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-hive_2.11</artifactId>
            <version>2.1.0</version>
        </dependency>


        <dependency>
            <groupId>org.scala-lang</groupId>
            <artifactId>scala-library</artifactId>
            <version>2.11.8</version>
            <scope>compile</scope>
        </dependency>

        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-client</artifactId>
            <version>2.7.3</version>
        </dependency>


        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-core_2.11</artifactId>
            <version>2.1.0</version>
        </dependency>

然后看一个例子spark sql的测试例子:
import org.apache.spark.sql.SparkSession
/**
  * spark sql本地测试例子
  */
object TestGroup {

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

    val spark = SparkSession
      .builder().master("local[1]")//设置loca模式
      .appName("Spark SQL basic example")//设置app的名字
      .getOrCreate()


    import spark.implicits._//导入隐式的转化函数
    import spark.sql //导入sql函数

    //使用Seq造数据,三列数据
    val df = spark.sparkContext.parallelize(Seq((0,"p",30.9),
      (0,"u",22.1),
      (1,"r",19.6),
      (2,"cat40",20.7),
      (2,"cat187",27.9),
      (2,"cat183",11.3),
      (3,"cat8",35.6))).toDF("id", "name", "price")//转化df的三列数据s

      df.createTempView("pro")//创建表明为pro

      //按照id分组,统计每组数量,统计每组里面最小的价格,然后收集每组里面的数据
      val ds=sql("select id, count(*) as c,min(price) as min_price,
collect_list(struct(name, price)) as res  from pro   group by id ");

    ds.cache() //需要多次查询的数据,可以缓存起来

    //获取查询的结果,遍历获取结果集
    ds.select("id","c","res","min_price").collect().foreach(line=>{

      import org.apache.spark.sql.Row//导入Row对象
      val id=line.getAs[Int]("id")//获取id
      val count=line.getAs[Long]("c")//获取数量
      val min_price=line.getAs[Double]("min_price")//获取最小的价格
      val value=line.getAs[Seq[Row]]("res")//获取每组内的数据集合,注意是一个Row实体
      println(id+"  "+count+"  "+"  "+min_price)//打印数据
      value.foreach(row=>{//遍历组内数据集合,然后打印
        println(row.getAs[String]("name")+" "+row.getAs[Double]("price"))

      })


    })

    spark.stop()

  }

}

至此,一个涵盖spark sql比较全的功能例子的小工程就完成了,上面的代码直接可在win上运行,而且里面的数据随时自己添加删除,以便于可以测试spark sql与预期效果对比,上面的sql中还用到了分组里面的高级用法,分组后,收集组内数据,注意组内数据收集,如果是单个字段,直接用collect_list或者collect_set即可,但是如果是多个字段,这个时候必须用到struct类型了,最终转化后的类型就是row的集合,里面的每个结构体会被转成一个row对象,一个组的数据,就是List<Row>了,最终可以在代码里面遍历取出。spark sql结合scala编程语言之后可以变得非常灵活,sql不擅长的就用编程语言解决的,sql擅长的就用sql方便快速得到数据,用起来非常干净清爽!



有什么问题可以扫码关注微信公众号:我是攻城师(woshigcs),在后台留言咨询。
技术债不能欠,健康债更不能欠, 求道之路,与君同行。


0
1
分享到:
评论

相关推荐

    Learning Spark SQL epub

    Learning Spark SQL 英文epub 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除

    Spark SQL操作JSON字段的小技巧

    主要给大家介绍了关于Spark SQL操作JSON字段的小技巧,文中通过示例代码介绍的非常详细,对大家学习或者使用spark sql具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。

    Spark SQL常见4种数据源详解

    Spark SQL的DataFrame接口支持多种数据源的操作。一个DataFrame可以进行RDDs方式的操作,也可以被注册为临时表。把DataFrame注册为临时表之后,就可以对该DataFrame执行SQL查询。 Spark SQL的默认数据源为Parquet...

    2015 Spark技术峰会-Spark SQL结构化数据分析-连城

    Databrciks工程师,Spark Committer,Spark SQL主要开发者之一的连城详细解读了“Spark SQL结构化数据分析”。他介绍了Spark1.3版本中的很多新特性。重点介绍了DataFrame。其从SchemaRDD演变而来,提供了更加高层...

    Spark SQL 教学讲解PPT

    参考Spark官网以及一些文献,制作的Spark SQL教学幻灯片,适合进行Spark入门介绍与教学!所有的Spark教学系列都在我的资源内!

    Spark SQL 实验

    Spark SQL 详细介绍 实验介绍 有需要的尽快下载吧

    Spark SQL 表达式计算

    表达式计算在Spark SQL中随处可见,本演讲将简介表达式、UDF、UDAF、UDTF的概念,主要的API,以及如何扩展Spark SQL函数库。本演讲还将提及Catalyst在计划阶段和Project Tungsten在执行层做的优化,以及未来性能提升...

    Learning Spark SQL - Aurobindo Sarkar

    Learning Spark SQL - Aurobindo Sarka

    Spark SQL操作大全.zip

    Spark SQL操作大全.zip

    实训指导书_使用Spark SQL进行法律服务网站数据分析.zip

    实训指导书_使用Spark SQL进行法律服务网站数据分析.zip

    Spark SQL分批入库

    List&lt;row&gt; list= spark.sql(sql).collectAsList(),获或者其他方法将数据存在List里面,然后就list转为 Dataset分批入库

    Spark SQL源码概览.zip

    Spark SQL源码概览.zip Spark SQL源码概览.zip Spark SQL源码概览.zip Spark SQL源码概览.zipSpark SQL源码概览.zip

    spark sql解析-源码分析

    spark-sql解析-源码分析

    基于成本的Spark SQL优化器框架

    我们把基于成本的优化器框架贡献给社区版本Spark 2.2。...这个基于成本的优化器框架对Spark SQL查询的性能有很好的提升 。在这次演讲中,我们将展示Spark SQL的新的基于成本的优化器框架及其对TPC-DS查询的性能影响。

    基于Spark SQL+Spark MLlib+Spark+隐语义模型(LFM)+实际项目经验的个性化电影推荐系统源码.zip

    基于Spark SQL+Spark MLlib+Spark Streaming+隐语义模型(LFM)+实际项目经验的个性化电影推荐系统源码+项目说明.zip 基于Spark SQL+Spark MLlib+Spark+隐语义模型(LFM)+实际项目经验的个性化电影推荐系统源码.zip ...

    Spark SQL源码概览.pdf

    Spark SQL 包含 3 个子项目:Core、Catalyst、Hive。其中 Catalyst 是核心的查询优化引 擎,独立于 Spark 平台;Spark SQL Core 封装 Catalyst,向应用程序提供 SparkSession、Dataset、 DataFrame 等 API...

    Learning-Spark-SQL.epub

    the basics of Spark SQL and its role in Spark applications. After the initial familiarization with Spark SQL, we will focus on using Spark SQL to execute tasks that are common to all big data projects

    《Spark SQL编程指南(v1.1.0)

    spark官文文档翻译有关spark SQL编程指南,spark SQL是以测试组件,有关api的介绍

Global site tag (gtag.js) - Google Analytics