Spark 1.x
//spark sql 用来处理结构化数据
类似数据库中的表一样存储数据
Spark1.x
val sc =new SparkContext(conf)
val sqlContext=new SQLContext(sc)
//将RDD和schema信息关联到一起,
1.RDD和case class
2.RDD和StructType
//case class Person将RDD中的数据转换成case class 属性相对应的类型,然后设置到case class中
3.val rdd:RDD[Person]=...
//将RDD转换成DataFrame
4.val df =rdd.toDF
//对df进行操作(1.直接使用DataFrame上的算子DSL. 2写SQL)
//将df注册成临时表
df.registerTempTable("t_person")
//执行SQL
val result :DataFrame=sqlContext.sql("SELECT * FROM t_person ...")
result.show()
Spark 2.x
//Spark2.x
val spark=SparkSession.builder()
.appName("")
.master("local[*]")
.getOrCreat()
//创建DF
val df =spark.createDataFrame(RDD[Row],schema)
//DSL 和SQL
df.createTempView("v_user")
//执行Sql
val result :DataFrame=spark.sql("SELECT * FROM v_user")
//执行Action
result.show()
//Spark2.x
DataSet也是一个分布式数据数据集
val spark=SparkSession.builder()
.appName("")
.master("local[*]")
.getOrCreate()
val lines =spark.read.textFile("hdfs://...")
val words =lines.flatMap(_.split(" "))
//DSL
val df =words.groupBy($("value") as "word").agg(count("*") as "counts").sort($"counts" desc)
df.show()