Spark编程案例——DataFrame

本文介绍了Spark SQL的基础,包括它与Hive的关系和依赖RDD的特性。详细讲解了如何在Spark SQL中使用DataFrame,如通过load函数加载Parquet和JSON数据,以及开发Spark SQL程序时的日志控制。此外,还提及了性能优化的初步概念,如缓存和参数调整。
摘要由CSDN通过智能技术生成

Spark SQL
1、相应于Hive: SQL —> MapReduce
2、底层依赖RDD: SQL —> RDD

一、Spark SQL基础
1、什么是Spark SQL?
参考官网

2、核心概念:DataFrame(表)= Schema(表结构) + Data(表数据)
                (*)就是表,是Spark SQL对结构化数据的抽象
                (*)DataFrame表现形式就是:RDD
 
             1.6后,新的概念:DataSet(类似DataFrame)
              
3、创建表:DataFrame
    (*)测试数据:员工表emp.csv、部门表dept.csv
        数据 : 7654,MARTIN,SALESMAN,7698,1981/9/28,1250,1400,30
         
    (方式一)使用case class定义表
        (1) 定义case class代表表的结构schema
        case class Emp(empno:Int,ename:String,job:String,mgr:String,hiredate:String,sal:Int,comm:String,deptno:Int)
     
        (2) 导入emp.csv文件(导入数据)
        val lines = sc.textFile("/root/temp/csv/emp.csv").map(_.split(","))
         
        (3) 生成表: DataFrame
        val allEmp = lines.map(x=>Emp(x(0).toInt,x(1),x(2),x(3),x(4),x(5).toInt,x(6),x(7).toInt))
        由allEmp直接生成表
        val empDF = allEmp.toDF

IDEA实现方式:

package dataframe
import org.apache.spark.sql.SparkSession
import org.apache.spark.{SparkConf, SparkContext}
object DataFrameDemo {
  def main(args: Array[String]): Unit = {
    //创建一个Context对象
    val conf = new SparkConf().setAppName("MyJdbcDriverLogCount").setMaster("local");
    val sc = new SparkContext(conf)
    val lines = sc.textFile("D:\\BaiduNetdiskDownload\\emp.csv").map(_.split(","))

    //把每行数据映射到Emp的类上,把数据和Schema关联
    val allEmp = lines.map(x=>Emp(x(0).toInt,x(1),x(2),x(3),x(4),x(5).toInt,x(6),x(7).toInt))

    val spark=  SparkSession.builder()
      .appName("MyJdbcDriverLogCount")
      .config("spark.some.config.option", "some-value")
      .getOrCreate()

    //import implicit DF,DS
    import spark.implicits._

    val empDF = allEmp.toDF()
    empDF.show()

  }
}
case class Emp(empno:Int,ename:String,job:String,mgr:String,hiredate:String,sal:Int,comm:String,deptno:Int)

        (4) 操作: DSL语句
             empDF.show         ---->  select * from emp
             empDF.printSchema  ---->  desc emp
     
    (方式二)使用SparkSession对象
        (1) 什么是SparkSession?
            查看启动spark shell的日志:Spark session available as 'spark'
            从2.0以后,Spark的新的访问接口:提供统一的访问方式
            通过SparkSession可以访问Spark所有的模块
            def createDataFrame(rowRDD: RDD[Row], schema: StructType): DataFrame 
             
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值