DataFrames 官方解释其为一个由多个有含义和名字的列组织数据的分布式集合, 其的表现形式比较类同与关系型数据库的表概念.
一般来说,都是优先使用DataFrames而不直接使用RDD,因为DataFrames会优化你的执行计划,而RDD则是忠实的按照你代码生成执行计划,并且spark sql 中提供很多方法便利地从多种数据源生成DataFrames.
如下即为从json文件中生成DataFrames以及一些DataFrames的基本使用:
val sc: SparkContext // An existing SparkContext.
val sqlContext = new org.apache.spark.sql.SQLContext(sc)
// 创建DataFrames
val df = sqlContext.read.json("examples/src/main/resources/people.json")
// 显示数据内容
df.show()
// age name
// null Michael
// 30 Andy
// 19 Justin
// 打印DataFrames的结构
df.printSchema()
// root
// |-- age: long (nullable = true)
// |-- name: string (nullable = true)
// 获取name列的数据
df.select("name").show()
// name
// Michael
// Andy
// Justin
// 获取name和age列的数据,但是age的每个值都+1
df.select(df("name"), df("age") + 1).show()
// name (age + 1)
// Michael null
// Andy 31
// Justin 20
// 获取age大于21的数据
df.filter(df("age") > 21).show()
// age name
// 30 Andy
// 查询age的分组计数情况
df.groupBy("age").count().show()
// age count
// null 1
// 19 1
// 30 1
spark sql也支持隐式将RDD转化为DataFrame,只需加入如下代码:
// this is used to implicitly convert an RDD to a DataFrame.
import sqlContext.implicits._