dataframe及sql

sparksql 运行架构:

SparkSQL语句的顺序为:

1. 对读入的SQL语句进行解析(Parse),分辨出SQL语句的关键词(如SELECT、FROM、WHERE 并判断SQL语句的合法性;

2. 将SQL语句和数据库的数据字典进行绑定(Bind)如果相关的Projection、Data Source等都是存在的话,就表示这个SQL语句是可以执行的;

3. 数据库会在这计划中选择一个最优计划(Optimize)

4. 计划执行(Execute),按Operation-->Data Source-->Result的次序来进行的,在执行过程有时候不需要读取物理表就可以返回结果,如重新运行刚运行过的SQL语句,可能直接从数据库的缓冲池中获取返回结果。

实现spark SQL:

1,产生SchemaRDD -- 为了实现SPARKSQL必须将一般的RDD转换成带数据结构的数据集DataFrame

2,SchemaRDD 本身是一个RDD,但它本身包含是由行对象(row object)组成。每个行对象代表一条记录

3, SchemaRDD 提供了一些新的操作应用函数使得数据操作和分析更高效和简洁

4,可以将SchemaRDD注册成表. 这样就可以用SQL访问RDD的数据了。而结果集本身也是SchemaRDD 即 DataFrame

5,可以用各种方法生成SchemaRDD

用createDataFrame 产生dataframe

from pyspark.sql import Row
from pyspark.sql import *
sqlContext= SQLContext(sc)
print(sqlContext)
eDF=sqlContext.createDataFrame([Row(a=1,b="男",c=50),Row(a=2,b="女",c=78)])
eDF.show()

运行结果

dataframe及sql_第1张图片

用sc.parallelize 产生DataFrame

namelist=['john','marry','lily']
agelist=[23,34,43]
gradelist=[89,95,46]
data=zip(namelist,agelist,gradelist)
df=sc.parallelize(data).toDF(schema=['name','age','grade'])
df.registerTempTable("stu")#使用registertemptable 创建一个临时表
dfs=sqlContext.sql("select name,age from stu ")#使用sql语句 进行查询
print(dfs.show())
df.show()

运行结果

dataframe及sql_第2张图片


用python list 产生dataframe

spark=SQLContext(sc)
a=range(20)
b=[i*2 for i in range(20)]
df=spark.createDataFrame(zip(a,b),("id",'value'))
#print(df.collect())
df.registerTempTable("mytable") #registerTepTable创建一个临时表
mytabledf=spark.sql("SELECT id,value from mytable where id=10")#使用sql 语句进行查询
mytabledf.show()
mytablesum=spark.sql("select sum(value) as sumy from mytable where id>=15")
mytablesum.show()


shark的概念:

shark 简单 的说是spark上的hive, 其底层依赖于hive引擎

但是在spark 平台上, shark 的解析速度是hive 的几多倍

它就是hive在spark上的体现,并且是升级版, 一个强大的数据仓库, 并且是兼容hive语法的

编程产生数据结构:

from pyspark.sql.types import *#需要导入 模块
fs=StructType([StructField('id',IntegerType(),True),StructField('name',StringType(),True)])
ids=[1,2,3,4]
names=["aa",'bb','cc','dd']
rdd=sc.parallelize(zip(ids,names))
df=rdd.toDF(fs)
df.show()

运行结果

dataframe及sql_第3张图片


你可能感兴趣的:(python)