资料来源:https://www.bilibili.com/video/BV1Jq4y1z7VP?p=107
这几天一直在学spark模块之间的关系,但是一直不清楚dataframe、RDD、dataset这几种数据结构之间的关系,也不清楚要写代码的话从哪里找文档,后面接触了spark sql之后一下子就明白了。本来以为Spark SQL只是用来写sql语句的,但是后面发现其包含的范围非常之大
sparkSQL是spark的一个模块,用于**处理海量结构化数据**,说明spark
spark sql 的特点:
因为 spark sql是用来替代Hive的,所有SPark和Hive之间的区别也有很大
而最重要的数据抽象就是以下问题:spark core中的数据抽象为RDD,而spark sql中的为dataframe,一个为二维表结构化数据,一个无标准数据结构
另外在Spark sql中还有一个dataset数据抽象类型,这个和dataframe的区别在于dataset不能用于python语言中
sparkSession和SparkContext的区别:
以前只能用SparkContext访问RDD编程,但是2。0之后SparkSession就能同时作为RDD和SQL编程入口了,
sparkSession的创建
spark = SparkSession.builder.appName("test").master("local[*]").getOrCreate()
通过sparkSession创建SparkContext:
sc = spark.sparkContext
这说明直接Session更加通用。
dataframe支持的风格编程
DSL风格
在使用spark的时候,经常会看到使用sql语言和一种其他的风格编程,另一种风格是DSL风格,也就是dataframe的特有API,比如df.where().limit(),而DSL风格有很多种方法,和pandas中的dataframe比较像,这个需要自行学习
sql风格
sql风格就是将dataframe首先定义为一个临时的视图,就像是sql数据库中的几个数据库
,而dataframe转换为视图有多种方式
- 注册为临时表
df.createTempView()
- 注册或者替换历史表
df.createOrReplaceTemView() #注册或者替换临时视图
- 注册为全局表,可以供其他的Context进行使用
df.createOrReplaceTemView() #注册或者替换临时视图