赞
踩
sparksql专门用于处理结构化的数据,而RDD还可以处理非结构化的数据。sparksql的优点之一是sparkfsql使用统一的api读取不同的数据,第二个优点是可以在语言中使用其他语言,例如python。另外sparksql还可以兼容hive,hive本身也是优秀的处理计算引擎,两个计算引擎相结合时非常有竞争力。
都是分布式的计算引擎,都可以运行在yarn之上。spark是基于内存计算,底层由RDD实现,hive是老式的mapreduce,基于磁盘,spark相对效率更高。spark SQL无元数据管理,可以混合代码来执行,hive只能写sql。
schema RDD已被废弃了,因为RDD适用的范围比较广,不适用于sql。
dataFrame与RDD的区别在于数据结构的不同,其他方面很相似。例如RDD底层是以数组对象存储。
一般赋值给spark
sc = spark.Context # RDD 操作入口
python代码
df = spark.read.csv(‘data.csv’,sep=‘,’,header=False)
df2 = df.toDF(‘id’,‘name’,‘score’) # 加上列名
df2.printSchema() # 展示表信息
df2.show()# 展示表
df2.createTempView(‘score’)
spark.sql(“”" select * from score where name=‘语文’
“”").show()
df2.where(“name=‘语文’”).show()
dataframe的表结构
基本操作
数据
语文,99
数学,98
英语,90
代码
rdd = sc.textFile(‘data.txt’) # 读出来是一个数组,每个元素是txt中的一行
.map(lambda x:x.split(‘,’)) # 切分
.map(lambda x:(x[0],int(x[1]))) # 类型转化,由字符串转为实数
df = spark.createDataFrame(rdd,schema=[‘name’,‘score’])
df.printSchema()
df.show(20,False) # 参数1表示展示多少条,默认为20条,参数2表示是否对列进行截断,截断时会使用…省略20条之后的数据。
df.createorReplaceTempView(‘score’)
spark.sql(“”“select * from score where scoer < 95"”").show()
RDD的运行受到开发者水平的影响,而sparkSQL能够自动优化。这是由于RDD有多种数据结构,而dataFrame是一种结构化数据,可以使用catalyst优化器进行优化。
spark缺少了一个元数据管理功能。而hive有元数据管理功能,hive的执行过程与spark类似,比spark多一个元数据管理功能。hive的元数据管理器和spark对SQL的处理构成了spark on hive。在spark中的hive配置文件中配置metastore服务即可。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。