sparkSQL中Dataframe的使用

sparkSQL中Dataframe的使用

一、简介

Spark SQL是Spark中的一个模块,主要用于进行结构化数据的处理。它提供的最核心的编程抽象,就是DataFrame。同时Spark SQL还可以作为分布式的SQL查询引擎。SparkSQL最重要的功能之一,就是从Hive中查询数据。

DataFrame,可以理解为是,以列的形式组织的,分布式的数据集合。它其实和关系型数据库中的表非常类似,但是底层做了很多的优化。DataFrame可以通过很多来源进行构建,包括:结构化的数据文件,Hive中的表,外部的关系型数据库,以及RDD。

二、DataFrame的创建

要使用SparkSQL,首先就得创建一个创建一个SQLContext对象,或者是它的子类的对象,比如HiveContext的对象。

Scala版本:
val sc: SparkContext = ...
val sqlContext = new SQLContext(sc)
import sqlContext.implicits._

spark2.X版本

Scala版本:
import org.apache.spark.sql.SparkSession

val spark = SparkSession
  .builder()
  .appName("Spark SQL basic example")
  .config("spark.executor.memory", "100g")
  .config("spark.cores.max", "72")
  .config("spark.dynamicAllocation.enabled", "false")
  .getOrCreate()

// For implicit conversions like converting RDDs to DataFrames
import spark.implicits._

除了基本的SQLContext以外,还可以使用它的子类——HiveContext。HiveContext的功能除了包含SQLContext提供的所有功能之外,还包括了额外的专门针对Hive的一些功能。这些额外功能包括:使用HiveQL语法来编写和执行SQL,使用Hive中的UDF函数,从Hive表中读取数据。

要使用HiveContext,就必须预先安装好Hive,SQLContext支持的数据源,HiveContext也同样支持——而不只是支持Hive。对于Spark 1.3.x以上的版本,都推荐使用HiveContext,因为其功能更加丰富和完善。

Spark SQL还支持用spark.sql.dialect参数设置SQL的方言。使用SQLContext的setConf()即可进行设置。对于SQLContext,它只支持“sql”一种方言。对于HiveContext,它默认的方言是“hiveql”。

dataframe的创建和操作
方法一:

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

/**
  * Created by cuiyufei on 2018/3/7.
  * dataframe实战
  */
object sparkStudy {
  def main(args: Array[String]) {
    val conf = new SparkConf().setAppName("dataframeOperation").setMaster("local")
    val sc = new SparkContext(conf)
    val sparkSQL = new SQLContext(sc)
    val df = sparkSQL.read.json("f://spark//students.json")
    df.show()//打印DataFrame中所有的数据(select * from ...)
    df.printSchema()//打印DataFrame的元数据(Schema)
    df.select("name").show()//查询某列所有的数据
    df.select(df("name"), df("age")+1).show()//查询某几列所有的数据,并对列进行计算
    df.filter(df("age")>18).show()// 根据某一列的值进行过滤
    df.groupBy("age").count().show()// 根据某一列进行分组,然后进行聚合
    df.createOrReplaceTempView("student")
    val stuDF = sparkSQL.sql("select * from student")
    stuDF.show()
  }

}

方法二:

import org.apache.spark.sql.SparkSession

/**
  * Created by cuiyufei on 2018/3/7.
  * dataframe实战
  */
object sparkStudy {
  def main(args: Array[String]) {
    val spark = SparkSession
      .builder()
      .appName("Spark SQL basic example")
      .master("local")
      .getOrCreate()
    import spark.implicits._

    val df = spark.read.json("f://spark//students.json")
    df.show()//打印DataFrame中所有的数据(select * from ...)
    df.printSchema()//打印DataFrame的元数据(Schema)
    df.select("name").show()//查询某列所有的数据
    //df.select(df("name"), df("age")+1).show()//查询某几列所有的数据,并对列进行计算
    df.select($"name", $"age"+1).show()//查询某几列所有的数据,并对列进行计算
    df.filter(df("age")>18).show()// 根据某一列的值进行过滤
    df.groupBy("age").count().show()// 根据某一列进行分组,然后进行聚合
    df.createOrReplaceTempView("student")
    val stuDF = spark.sql("select * from student")
    stuDF.show()
  }

}

students.json文件的内容如下:

{"name":"Leo", "score":85, "age": 25}
{"name":"Marry", "score":99, "age":18}
{"name":"Jack", "score":74, "age":18}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yiluohan0307

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值