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()
}
}
SparkSQL之“Dataset和Dataframe
最新推荐文章于 2023-09-11 13:00:33 发布