?
Table of Contents
1. spark sql2. SQLContext2.1. sql context是spark sql的所有功能入口点2.2. 通过spark context创建sql context2.3. hive context功能上多于sql context,未来sql context也会增加功能3. DataFrames3.1. 功能3.2. 创建DataFrames3.3. DSL1 spark sql
是spark的一个模块处理结构化数据提供了DataFrames作为 编程的抽象层同时也是一个分布式sql查询引擎可以从hive中读取数据2 SQLContext
2.1 sql context是spark sql的所有功能入口点
2.2 通过spark context创建sql context
val sc: SparkContext // An existing SparkContext. val sqlContext = new org.apache.spark.sql.SQLContext(sc)
注意,上面的val sc: …其实不需要写,因为启动spark-shell的时候有这么一个提示, 所以直接用就好。
Spark context available as sc.
2.3 hive context功能上多于sql context,未来sql context也会增加功能
不过由于我对hive不感兴趣,不会创建hive context
3 DataFrames
3.1 功能
分布式数据集合列的方式组织理解为关系 数据库的表可以从结构化文件,hive表,外部数据库或者RDD构造3.2 创建DataFrames
通过SQLContext创建DataFrames,可以从外部文件,hive表或者RDD来创建。 为了测试本地文件,启动spark-shell的时候不要用–master连接spark master, 否则会提示找不到本地文件。 而如果想访问hdfs文件,启动spark-shell的时候要用–master。
scala> val sqlContext = new org.apache.spark.sql.SQLContext(sc)
sqlContext: org.apache.spark.sql.SQLContext = org.apache.spark.sql.SQLContext@5d9ac1ff
scala> val df = sqlContext.read.json("/home/smile/people.json")
df: org.apache.spark.sql.DataFrame = [age: bigint, name: string]
scala> df.printSchema()
df.printSchema()
root
|-- age: long (nullable = true)
|-- name: string (nullable = true)
scala> df.show()
df.show()
+---+----+
|age|name|
+---+----+
| 38|Dean|
+---+----+
3.3 DSL
DataFrames提供了DSL方面对结构化数据进行操作,都是些函数,比如select, df, printSchema, show, groupBy, filter等。
scala> df.select("name").show()
+----+
|name|
+----+
|Dean|
+----+