Spark SQL and DataFrame小记

一、Spark SQL
1.易整合
2.统一的数据访问方式
3.兼容HIve
4.标准的数据连接
二、DataFrames
定义:
与RDD类似,DataFrame也是一个分布式数据容器,然而Dataframe更像传统数据库的二维表格,除了数据意外,还记录着数据的结构信息,即schema。同时,与HIve类似,DataFrame也支持嵌套数据类型(struct、array 和map)。从API的易用性来看,DataFrameAPI提供的是一套高层的关系操作,比函数式的RDDAPI更加要友好,门槛更低。由于与R和Pandas的DataFrame类似,Spark Dataframe很好地继承了传统单机数据分析的开发体验。
创建DataFrame:
在Spark SQL中SQLContext是创建DataFrame和执行SQL的入口,在spark-1.6.1中已经内置了一个sqlContext。
有两种方式可以构建DataFrame:
1.通过反射的方式创建

def main(args: Array[String]): Unit = {
    val conf = new SparkConf().setAppName("RDDDF").setMaster("local")
    val sc = new SparkContext(conf)
    val sQLContext = new SQLContext(sc)
    //创建一个普通的RDD
    val rdd = sc.textFile("C:\\Users\\lenovo\\Documents\\Tencent Files\\625139589\\FileRecv\\spark\\students.txt")
    val rdd2 = rdd.map(t => {
      val lines = t.split(",")
      student(lines(0).toInt, lines(1), lines(2).toInt)
    })
    //需要导入一个隐式转换
    import sQLContext.implicits._
    val df = rdd2.toDF()
    //注册临时表
    df.registerTempTable("students")
    val dfs = sQLContext.sql("select * from students where age<18")
    dfs.show()
    //dfs.write.mode(SaveMode.Append).text("hdfs://Spark01:9000/user")
  }
}
//创建样例类
case class student(id:Int,name:String,age:Int)

2.通过编程接口的方式创建

def main(args: Array[String]): Unit = {
  val conf = new SparkConf().setAppName("RDDDF02").setMaster("local")
  val sc = new SparkContext(conf)
  val sQLContext = new SQLContext(sc)

  val rdd = sc.textFile("C:\\Users\\lenovo\\Documents\\Tencent Files\\625139589\\FileRecv\\spark\\students.txt")
  val lines: RDD[Row] = rdd.map(t => {
    val str = t.split(",")
    Row(str(0).toInt, str(1), str(2).toInt)
  })
  //构建StructType
  val structType = StructType(Array(StructField("id",IntegerType,true),StructField("name",StringType,true),StructField("age",IntegerType,true)))
  //构建DataFrame
  val df :DataFrame= sQLContext.createDataFrame(lines,structType)
  //注册临时表
  df.registerTempTable("stu")
  //开始SQL处理数据
  val sql = sQLContext.sql("select * from stu where age>17")
  //转换RDD处理
  sql.rdd.foreach(println)
}

四、数据源
1.从mysql中加载数据

val jdbcDF = sqlContext.read.format("jdbc").options(Map("url" -> 
"jdbc:mysql://spark01:3306/spark1", "driver" -> "com.mysql.jdbc.Driver", 
"dbtable" -> "person", "user" -> "root", "password" -> "root")).load()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值