原因:
- 关系数据库已经很流行
- 关系数据库在大数据时代已经不能满足要求,首先,用户需要从不同数据源执行各种操作,包括结构化和非结构化数据,其次用户需要执行高级分析,比如机器学习和图像处理
- 从实际大数据应用中,经常需要融合关系查询和复杂分析算法
起源: - hive并不是另一个SQL,它只是SQL-on-Hadoop,执行的是在Hadoop上实现用 类SQL的语法 对 SQL 的快速查询。而在Spark 开始兴起之后,就开始转向在Spark上使用Hive,于是开发出了Shark==Hive on Spark.
联系:
- RDD、DataFrame、全都是spark 平台下的分布式弹性数据集,为处理超大型数据提供便利
- 两者根据spark 的内存情况自动缓存运算,这样即使数据量很大,也不用担心会内存溢出
区别:
- RDD 是整个 Spark 平台的存储、计算以及任务调度的逻辑基础,更具有通用性,适用于各类数据源,
- DataFrame 是只针对结构化数据源的高层数据抽象,其中在 DataFrame 对象的创建过程中必须指定数据集的结构信息( Schema ),所以DataFrame 生来便是具有专用性的数据抽象,只能读取具有鲜明结构的数据集
spark.read.text(url)
spark.read.json(url) 注意从不同文件类型生成DataFrame的区别。
spark.read.format("text").load("people.txt")
spark.read.format("json").load("people.json")
基于df的操作:
打印数据 df.show()默认打印前20条数据
打印概要 df.printSchema()
查询总行数 df.count()
df.head(3) #list类型,list中每个元素是Row类
输出全部行 df.collect() #list类型,list中每个元素是Row类
查询概况 df.describe().show()
取列 df[‘name’], df.name, df[1]
基于spark.sql的操作:
创建临时表虚拟表 df.registerTempTable('people')
spark.sql执行SQL语句 spark.sql('select name from people').show()
分别从文件创建DataFrame
比较两者的异同
- Pyspark的DataFrame 是基于 RDD 的一种数据类型,具有比 RDD 节省空间和更高运算效率的优点。pandas的DataFrame 是一种表格型数据结构,按照列结构存储,它含有一组有序的列,每列可以是不同的值,但每一列只能有一种数据类型。
- pandas中DataFrame 是可变的,pyspark中RDDs 是不可变的,因此 DataFrame 也是不可变的
- pandas中所以是自动创建的,pyspark中没有 index 索引,若需要需要额外创建该列
- pandas的是Series 结构,属于 Pandas DataFrame 结构,pyspark的是Row 结构,属于 Spark DataFrame 结构
pandas中DataFrame转换为Pyspark中DataFrame
Pyspark中DataFrame转换为pandas中DataFrame
6.1 利用反射机制推断RDD模式
创建RDD sc.textFile(url).map(),读文件,分割数据项
每个RDD元素转换成 Row
由Row-RDD转换到DataFrame
6.2 使用编程方式定义RDD模式
下面生成“表头”
下面生成“表中的记录”
下面把“表头”和“表中的记录”拼装在一起
df.write.text(dir)
df.write.json(dri)
df.write.format("text").save(dir)
df.write.format("json").save(dir)