#DataFrame产生背景
DataFrame不是spark sql提出的,而是早在R,Pandas语言就已经存在了。
#DataFrame概述
官网概述:
A Dataset is a distributed collection of data
数据集是分布式数据集合
A DataFrame is a Dataset organized into named columns.
DataFrame是一个组织成命名列的数据集(以列(列名,列的类型,列值)形式构成的分布式数据集),按照列赋予不同的名称
ex:
student
Id:int
name:string
city:string
It is conceptually equivalent to a table in a relational database or a data frame in R/Python,
它在概念上等价于关系数据库中的表或R/Python中的数据帧,
DataFrames can be constructed from a wide array of sources such as: structured data files, tables in Hive, external databases, or existing RDDs.
DataFrames可以由一系列广泛的源构建,例如:结构化数据文件、Hive中的表、外部数据库或现有的RDDs。
An abstraction for selecting,flitering,aggregation and plotting structured data
用于选择、转送、聚合和绘制结构化数据的抽象
处理数据对比图:
#DataFrame对比RDD
RDD:
使用java/scala ==> jvm
python ==>python runtime
DataFrame:
java/scala/python ==>转换成Logic plan(逻辑计划)
#DataFrame基本的Api操作
1.Create DataFrame
2.printSchema
3.show
4.select
5.filter
import org.apache.spark.sql.SparkSession
/**
* DataFrame API基本操作
*/
object DataFrameApp {
def main(args: Array[String]) {
val spark = SparkSession.builder().appName("DataFrameApp").master("local[2]").getOrCreate()
// 将json文件加载成一个dataframe
val peopleDF = spark.read.format("json").load("file:///Users/rocky/data/people.json")
// 输出dataframe对应的schema信息
peopleDF.printSchema()
// 输出数据集的前20条记录
peopleDF.show()
//查询某列所有的数据: select name from table
peopleDF.select("name").show()
// 查询某几列所有的数据,并对列进行计算: select name, age+10 as age2 from table
peopleDF.select(peopleDF.col("name"), (peopleDF.col("age") + 10).as("age2")).show()
//根据某一列的值进行过滤: select * from table where age>19
peopleDF.filter(peopleDF.col("age") > 19).show()
//根据某一列