sparksql优势:
数据兼容: 数据结果集本身就是SPARK RDD. SparkSQL可兼容Hive, JSON和 parquet等文件. 并可获取RDBMS数据以及访问cassandra等NOSQL数据文件
性能优化: 除了采取In-Memory Columnar Storage、byte-code generation等优化技术外、将会引进Cost Model对查询进行动态评估、获取最佳物理计划等等;
组件扩展:SQL的语法解析器、分析器还是优化器都可以重新定义,进行扩展. 如 HIVE SQL
SparkCore 核心rdd.
rdd是并行数据集。
SparkSql建立在SHARK上,SHARK依赖于HIVE(数据库)。
SHARK:是依赖于HIVE,解析速度快几倍。
HIVE:相当于mysql数据库似的,存储数据的,可以写sql语句,做数据分析,数据存在HDFS上,
SparkSql还是转成文件系统格式。
SparkSql运行架构:
query(查询)-->Parse(解析)-->Bind(绑定)-->Optimize(数据库选择最优路径)-->Execute(计划执行)。
api:application programming interface应用程序编程接口
API就是一个函数的collection。例如,creatfile() , rollback()回滚等。
产生dataframe:
1、
from pyspark.sql import Row
from pyspark.sql import *
sqlContext = SQLContext(sc)
eDF = sqlContext.createDataFrame([Row(a=1, intlist=[1,2,3], mapfield={"a": "b"})])
x=eDF.collect()
print (x[0][0], x[0][1], x[0][2])
2、
namelist = ['John','Marry','Larry']
agelist = [23, 35, 60]
gradelist = [88, 76, 70]
datadb=zip(namelist, agelist, gradelist)
print (datadb)
df = sc.parallelize(datadb).toDF(schema=['name', 'age', 'mark'])
df.show()
产生dataframe,在注册临时表,在用spark.sql查询,spark是变量,生成的
spark=SQLContext(sc)
a=range(10)
b=[2*x for x in range(10)]
df=spark.createDataFrame(zip(a,b),['id','value'])
#df2=spark.createDataFrame(,['haha','hehe'])
df.show()
#df2.show()
print(df.collect())
df.registerTempTable('mytable')#必须先创建临时表
mytabledf = spark.sql("SELECT id, value FROM mytable where id=8")
print(mytabledf.show())
sql做不了,就用map,reduce等。
pandas:为数据分析而创建的,纳入大量数据库,有很多函数和方法,强大高效。
numpy:是python做数值计算,可用来存储和处理大型矩阵,更高效。
panel data :面板数据
pandas数据结构:
series:一维数组,一行,数据类型必须相同,java是相同的
time-series:以时间为索引的series
dataframe:二维表格数据结构。是series的容器。
panel:三维的数组,是dataframe的容器
exec()执行
编程产生数据结构:
from pyspark.sql import * #从sql导入全部
from pyspark.sql.types import *
ids=[1,2,3]
names=['aa','bb','cc']
rdd=sc.parallelize(zip(ids,names))
df=rdd.toDF(st)
print(df.show())
读入文件直接产生结构:json和parquet
spark=SQLContext(sc)#直接读了json就转换成df格式,
df=spark.read.json('/user/hadoop/json1')
df.show()