一. DataFrame的概述:
是一个分布式的数据集并且以列的形式进行组合(A DataFrame is a Dataset organized into named columns),
它在概念上等同于关系数据库中的表或R / Python中的数据框,
而Dataset(A Dataset is a distributed collection of data 分布式的数据集)
二.DataFrame对比RDD:
概念:
RDD: 是一个分布式的可以进行并行处理的集合,
DataFrame:也是一个分布式的数据集,但是DataFrame更像是传统的数据库中的一个表,除了数据之外还可以知道列名,表等,也可以支持
复杂的数据结构,map,结构体,数组等
区别:
RDD:
java/scala 使用的是 jvm环境
python 使用的是python环境
DataFrame:
java/scala/python 转换成逻辑执行计划
总结: 两者的执行效果是一样的.
三.DataFrame的基本API操作:
import org.apache.spark.sql.SparkSession
/**
* Created by 李国辉 on 2018/10/9.
* DataFrame API基本操作
*/
object DataFrameApp {
def main(args: Array[String]) {
val spark = SparkSession.builder().appName("DataFrameApp").master("local[2]").getOrCreate()
val people = spark.read.format("json").load("people.json")
//输出dataframe对应的schema信息 以树的形式
people.printSchema()
结果显示:
//输出数据集的前20条记录
people.show()
结果显示:
// 查询name列的数据 等同于 select name from table
people.select(“name”).show()
//把列的age加10 等同于 select name,age+10 from table
people.select(people.col(“name”),people.col(“age”)+10).show()
// .as() 为列取别名
people.select(people.col("name"),(people.col("age")+10).as("age2")).show()
//根据某一列的值进行过滤: select * from table where age > 19
people.filter(people.col(“age”)>24).show()
> //根据某一列进行分组,然后再进行聚合操作: select age,count(1) from table group by age
> people.groupBy("age").count().show()
//关闭
spark.stop()
}
}
以上就是常用的DataFrame的API以及介绍。实战演练请点击查看