SparkSQL入门案例之一(SparkSQL1.x)

本文详细介绍如何在IDEA+Maven+Scala环境下,使用SparkSQL 1.x进行数据处理。通过实例演示从创建DataFrame到执行SQL查询的全过程,包括pom依赖配置、代码实现及测试数据创建。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SparkSQL 1.x和2.x的编程API有一些变化,企业中都有使用,所以这里两种方式都将使用案例进行学习

先使用SparkSQL1.x的案例

开发环境跟之前开发SparkCore程序的一样,IDEA+Maven+Scala

1.导入SparkSQL的pom依赖

在之前的博文  Spark案例之根据ip地址计算归属地中的pom依赖中加上下面的依赖即可

<dependency>
       <groupId>org.apache.spark</groupId>
       <artifactId>spark-sql_2.11</artifactId>
       <version>${spark.version}</version>
</dependency>

2.具体代码实现,因为代码中已经有很详细的说明了,所以这里就直接放出来了

package cn.ysjh0014.SparkSql

import org.apache.spark.rdd.RDD
import org.apache.spark.sql.{DataFrame, SQLContext}
import org.apache.spark.{SparkConf, SparkContext}

object SparkSqlDemo1 {

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

    //这个程序可以提交到Spark集群中
    val conf = new SparkConf().setAppName("SparkSql").setMaster("local[4]") //这里的setMaster是为了在本地运行,多线程运行

    //创建Spark Sql的连接
    val sc = new SparkContext(conf)
    //SparkContext不能创建特殊的RDD,将Spark Sql包装进而增强
    val SqlContext = new SQLContext(sc)

    //创建DataFrame(特殊的RDD,就是有schema的RDD),先创建一个普通的RDD,然后再关联上schema
    val lines = sc.textFile(args(0))

    //将数据进行处理
    val boyRdd: RDD[Boy] = lines.map(line => {
      val fields = line.split(",")
      val id = fields(0).toLong
      val name = fields(1)
      val age = fields(2).toInt
      val yz = fields(3).toDouble
      Boy(id,name,age,yz)
    })
    //该RDD装的是Boy类型的数据,有了schema信息,但是还是一个RDD,所以应该将RDD转换成DataFrame
    //导入隐式转换
    import SqlContext.implicits._
    val df: DataFrame = boyRdd.toDF

    //变成DataFrame后就可以使用两种API进行编程了

    //1.使用SQL的方式
    //把DataFrame注册成临时表
    df.registerTempTable("body") //过时的方法
    //书写SQL(sql方法其实是Transformation)
    val result: DataFrame = SqlContext.sql("SELECT * FROM body ORDER BY yz desc, age asc")         //注意:  这里的SQL语句该大写的必须大写
    //查看结果(出发Action)
    result.show()


    //释放资源
    sc.stop()

  }
}

case class Boy(id: Long, name: String, age: Int, yz: Double)      //样例类

3.创建测试数据

创建一个txt文件,然后在里面输入以下数据

1,zhangsan,15,99
2,lisi,16,98
3,wangwu,20,100
4,xiaoming,11,97
5,xioali,8,92

4.运行测试

在运行前传入参数args(0)

运行结果:

可以看出输出结果是以一张表的形式展现的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值