DataFrame与RDD的区别
前者具有schema元素信息,即DataFrame所表示的二维数据集,包含每列的名称和类型。
Spark SQL是由DataFrame派生出来的,通过三步创建使用
- 创建DataFrame
- 将DataFrame注册成临时表
- 使用临时表进行查询统计
使用RDD创建DataFrame
from pyspark.sql import SparkSession
sqlContext = SparkSession.builder.getOrCreate()
定义DataFrame的每一个字段名和数据类型
from pyspark.sql import Row
saleRows = salesRDD.map(lambda x:Row(
字段名=p[]))
使用sqlContext.createDataFrame创建DataFrame
sale_df = spark.createDataFrame(saleRows)
sale_df.printSchema()
注册临时表
sale_df.registerTempTable('sale_table')
用Spark SQL查看项数
sqlContext.sql('select count(*) counts from sale_table').show()
DataFrame查看数据是用show
sqlContext.sql('select * from sale_table').show() #使用sparkSQL查看
sale_df.show() #用dtaframe查看
有人说,用take可不可以?
可以看到,take是以列表形式返回行取数据
选择指定行输出
book_df.select('id','name').show()
查看DataFrame的方法和属性
dir(book_df)
查询评分大于9的书
book_df.filter(book_df['rating']>9).show()
统计各出版社的书本数量
book_df.groupBy('publish').count().show()
把所有评分加1
book_df.select(book_df['id'],book_df['name'],book_df['rating']+1).show()
sparkDataFrame转为pandas 的DataFrame
book_pda = book_df.toPandas()
Spark SQL和DataFrame操作的区别
- spark sql首先要对dataframe注册一张临时表,对临时表进行sql操作,需要借助sqlContext.sql(),括号内写入数据库的命令
- dataframe 直接使用数据库的命令