SparkSQL DataFrame基础篇
SparkSQL DataFrame进阶篇
SparkSQL DataFrame基础篇
Spark 2.2及以后的SparkSession替换了Spark以前版本中的SparkContext和SQLContext,为Spark集群提供了唯一的入口点。
val spark =SparkSession.builder().
appName(“SparkExample”).
getOrCreate()
为了向后兼容,SparkSession对象包含SparkContext和SQLContext对象。当使用交互式Spark shell时,创建一个SparkSession类型对象名为spark。
因此该文档里所有的SQLContext在spark2.2+中都可以替换成spark
基于反射机制创建DataFrame
//students.txt
160201,Michael,17
160101,Andy,23
160301,justin,23
160202,John,22
160102,Herry,17
160203,Brewster,18
160302,Brice,20
160303,Justin,25
160103,Jerry,22
160304,Tom,24
不结合hive,使用spark实例(适用于spark1+)
val spark=new org.apache.spark.sql.spark(sc)
import spark.implicits._
结合hive后,访问hive时使用HiveContext实例
val hiveContext=new org.apache.spark.sql.hive.HiveContext(sc)
import hiveContext.implicits._
这里与Spark2.2+有所不同
case class Student(id: String, name : String, age: Int)
val rdd=sc.textFile("hdfs://master:9000/sqldata/students.txt").map(_.split(",")).map(p => Student(p(0), p(1), p(2).trim.toInt))
val students = rdd.toDF()
students.registerTempTable("tb_students")
val youngstudents=spark.sql("SELECT name FROM tb_students WHERE age>=19 AND age<=22")
youngstudents.show
基于编程创建DataFrame
import org.apache.spark.sql.types._
import org.apache.spark.sql._
import org.apache.spark._
val students=sc.textFile("hdfs://master:9000/sqldata/students.txt")
val schemaString="id name age"
val schema=StructType(schemaString.split(" ").map(fieldname=> StructField(fieldname, StringType, true)))
val rowRDD=students.map(_.split(",")).map(p=>Row(p(0), p(1), p(2).trim))
val studentsDataFrame=spark.createDataFrame(rowRDD, schema)
studentsDataFrame.registerTempTable("tb_students")
val names=spark.sql("SELECT name FROM tb_students")
names.show
基于DataFrame创建Json文件
1.创建DataFrame
import spark.implicits._
case class Student(id: String, name : String, age: Int)
val rdd=sc.textFile("hdfs://master:9000/sqldata/students.txt").map(_.split(",")).map(p => Student(p(0), p(1), p(2).trim.toInt))
val students = rdd.toDF()
2.另存为json类型文件
//students.save("hdfs://master:9000/sqldata/students.json")//无法执行
spark1.4及以后,dataframe中的save方法不建议使用,有的直接被弃用,
使用DataFrame中的write方法返回一个DataFrameWriter类型对象