Spark SQL之Dataset

一、 Dataset的概念

1、 Dataset是DataFrame的升级版,相比于DataFrame的好处在于,Dataset可以存放各种各样的数据类型,而DataFrame算是Dataset的一个特例,当Dataset的数据类型为Row时就是DataFrame。

二、 Dataset的创建方式

1、 通过隐式转换函数toDS()从集合或者RDD中创建

/**
 * 通过隐式转换函数来创建Dataset
 * @param name
 * @param age
 */
case class Teacher(@BeanProperty var name:String, @BeanProperty var age : Int)
object Demo01 {
  def main(args: Array[String]): Unit = {
    val conf = new SparkConf().setAppName("Demo").setMaster("local[*]")
    val session = SparkSession.builder().config(conf).getOrCreate()

    //内存中---集合 通过toDS
    import session.implicits._
    val teachers: Seq[Teacher] = Seq(Teacher("zs", 20), Teacher("ls", 30))
    val rdd:Dataset[Teacher] = teachers.toDS()
    val teacher:Teacher = rdd.first()
    rdd.show()
  }
}

2、 通过SparkSession的createDataset函数从集合或者RDD中创建

object Demo01 {
  def main(args: Array[String]): Unit = {
    val conf = new SparkConf().setAppName("Demo").setMaster("local[*]")
    val session = SparkSession.builder().config(conf).getOrCreate()

    //createDataset
    val rdd1 = session.createDataset(Array(("ls", 20), ("zs", 30)))
    rdd1.show()

  }
}

3、 从外部存储文件中创建 —只能使用text纯文本文件

object Demo02 {
  def main(args: Array[String]): Unit = {
    val conf = new SparkConf().setAppName("Demo02").setMaster("local[*]")
    val session = SparkSession.builder().config(conf).getOrCreate()

    val map = Map("mode" -> "FAILFAST", "inferSchema" -> "true")
    val file = session.read.options(map).textFile("hdfs://node1:9000/student.txt")

    import session.implicits._
    val value = file.map((line: String) => {
      val array = line.split(" ")
      Teacher(array(0), array(1).toInt)
    })
    value.show()
  }
}

4、 通过DataFrame中借助一些相关算子来进行转换

Spark SQL后期最常用的还是使用SQL语言、HQL语法去对DataFrame或者Dataset中的数据进行处理分析,SQL、HQL语言如果想要实现复杂的业务逻辑,SQL、HQL中支持的函数操作必然不能少的
Spark SQL中也给提供了很多常用的SQL、HQL操作函数,同时用户如果觉得对函数不满意,可以自定义Sparlk SQL函数,应用在Spark SQL的数据处理分析上

三、 RDD、DataFrame、Dataset之间的转换

1、 RDD转换DataFrame通过toDF()
2、 RDD转换Dataset通过toDS()
3、 DataFrame,Dataset转换RDD通过xxxx.rdd()
4、 DataFrame转换为Dataset通过xxxx.as()
5、 Dataset转换为DataFrame通过xxxx.toDF()

四、 Dataset操作

一般使用过程中常用SQL、HQL方式进行数据的统计分析。SQL、HQL中我们可以使用一些函数来满足我们的业务需求,其中Spark SQL中SQL、HQL语句也支持MySQL和hive中的函数,同时Spark SQL也支持自定义函数(UDF\UDTF\UDAF)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值