SparkSQL之“Dataset和Dataframe

package zsyh.sprk.core

import org.apache.spark.sql.{DataFrame, Dataset, SparkSession}
case class Person(name:String, age:Int)

/**
  *
  *     SparkSql最大的特点是它针对结构化数据设计,SparkSql应该是能支持对某一个字段的访问,而这种访问方式以个前提
  * 就是SparkSql的数据集中,要包含结构化信息,也就是俗称的Schema
  *     SparkSql对外提供的API分为两种,一类是直接执行SQL,另外一类是命令式.SparkSQL提供的命令式API就是DataFrame和
  * Dataset,暂时也可以认为DataFrame就是Dataset,只是在不同的API中返回的不同表现形式.
  *
  * DataSet和DataFrame的使用
  * 与RDD的区别在于,比如一个Person的对象,RDD操作的是Person的整个对象,而不知道一个Person中到底有什么字段
  * Dataset和DataFrame是直接可以操作一个Person对象的属性的
  *
  * Dataset和DataFrame是有Scheme的
  *         Dataset和DataFrame操操作             RDD
  *    scheme |  name     age
  *          |   张三     10                   Person
  *             李四     18                    Person
  *            王五     30                    persob
  *              ...
  *
  *下面简单的使用
  */
object CoverDemoSparkSql {
  def main(args: Array[String]): Unit = {
    val spark = SparkSession.builder()   //SparkSession支持多种数据源,不仅仅是SparkContext,还有SqlContext,HiveContext等
      .appName("ds_intro_demo_one")
      .master("local[6]")
      .getOrCreate()
    import spark.implicits._

    val sourceRDD = spark.sparkContext.parallelize(Seq(Person("张三", 18), Person("李四", 20), Person("王五", 25)))
    val personDS = sourceRDD.toDS()

    val resultDS = personDS.where('age > 10)
      .where('age < 50)
      .select('name)
      .as[String]
    resultDS.show()
  }
}


object CoverDemoSparkSqlDemoOne{
  def main(args: Array[String]): Unit = {
    val spark = SparkSession.builder()
      .appName("ds_intro_demo_two")
      .master("local[6]")
      .getOrCreate()
    import spark.implicits._
    val sourceRDD = spark.sparkContext.parallelize(Seq(Person("张三", 18), Person("李四", 20), Person("王五", 25)))
    val personDF = sourceRDD.toDF()
    personDF.createOrReplaceTempView("person");

    val resultFrame = spark.sql("select name,age from person where age > 10 and age < 100")

    resultFrame.show()
  }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值