认识:最核心的编程抽象就是DataFrame。
原理:将Spark SQL 转化为 RDD, 然后提交到集群执行。
SparkSession:统一的切入点,实质上是SQLContext和HiveContext的组合。允许用户通过它调用 DataFrame 和 Dataset 相关 API 来编写程序
DataFrame:以RDD为基础的分布式数据集,二维表格。schemaRDD,比RDD多了一个表头信息(Schema)。DataFrame是用来处理结构化数据的
RDD:弹性分布式数据集.是Spark对数据进行的一种抽象,可以理解为Spark对数据的一种组织方式。更简单些说,RDD 里面包含了数据和操作数据的方法。关键字:弹性,分布式,数据集
DataSet:对于RDD而言,DataSet做了强类型支持,在RDD的每一行都做了数据类型约束。RDD转换DataFrame后不可逆,但RDD转换Dataset是可逆的。
RDD转换成dataframe:
- 反射:根据RDD对象的具体类型映射,推导出schema,也就是反射
- 通过显式的程序代码构造schema,然后将schema应用到RDD上,最后转换成DataSet
-----------------------------------------------------------------------------------------------------------------
SparkSession sparkSession = SparkSession.builder().master("local")
.appName("Java Spark SQL")
.getOrCreate();
Dataset<Row> dataset = sparkSession.read().json("URL");
//只返回name字段
dataset.select("name").show();
//返回两个字段,所有age的value+1
dataset.select(col("name"),col("age").plus(1)).show();
//选择age大于21岁的人
dataset.filter(col("age").gt(21)).show();
//分组聚合,group age
dataset.groupBy("a