DataFrame和DataSets概述
产生背景:
它不是SparkSQl提出的,而是早在R,Pandas语言就有了
想提供受众广的API
RDD和MapReduce编程门槛高
概念:
A DataFrame is a Dataset organized into named column(以列(列名,列的类型,列值)的形式构成分布式数据集,按照列赋予不同名称
A Dataset is a distributed collection of data(RDD with schema)
It is conceptually equivalent to a table in a relational database or a data frame in R/Python, but with richer optimizations under the hood
An abstraction for selecting,filtering,aggregation,and plotting structured data
Previous SchemaRDD(SPark<1.3)
DataFrame对比RDD:
RDD:
Java/scala==>jvm
python=>python runtime(执行效率不一定)
DataFrame:
Java/scala/python==>Logic Plan(执行效率一样)
可以处理结构体,map,数组
方便实用
DataFrame常用API:
DataFrame与RDD互操作之一:反射方式
使用反射来推断包含了特定数据类型的RDD的元数据
使用DataFrameAPI或者Sql方式编程
DataFrame与RDD互操作之一:编程方式
DataFrame与RDD互操作比较:
反射:case class 前提:事先需要知道你的字段,字段类型
编程:Row 如果第一种情况不能满足你的要求(事先不知道列)
查看内置函数:spark.sql("show functions").show;
DataSets概念:
In the Scala API, DataFrame
is simply a type alias of Dataset[Row]