ITKeyword,专注技术干货聚合推荐

注册 | 登录

spark - sql框架

功夫小当家 分享于

2021腾讯云限时秒杀,爆款1核2G云服务器298元/3年!(领取2860元代金券),
地址https://cloud.tencent.com/act/cps/redirect?redirect=1062

2021阿里云最低价产品入口+领取代金券(老用户3折起),
入口地址https://www.aliyun.com/minisite/goods

推荐:Spark SQL - DataFrame

1 Overview Spark SQL is a Spark module for structured data processing. It provides a programming abstraction called DataFrames and can also act as dis

1.什么是spark-sql? spark-sql 不是sql,它是spark提供的处理结构化数据的框架,不仅仅是一个sql框架,还支持DataFrame和DataSet hive on spark 是hive提供的以spark作为计算引擎的计算框架,类似的框架还有hive on tez, mr等,hive1.1版本开始提供的,目前不是稳定版本 2.DataFrame DataFrame是一个分布式集合,其中数据被组织为命名的列。它概念上等价于关系数据库中的表,但底层做了更多的优化。DataFrame可以从很多数据源构建,比如:已经存在的RDD、结构化文件、外部数据库、Hive表。 DataFrame的前身是SchemaRDD,从Spark 1.3.0开始SchemaRDD更名为DataFrame。与SchemaRDD的主要区别是:DataFrame不再直接继承自RDD,而是自己实现了RDD的绝大多数功能。你仍旧可以在DataFrame上调用.rdd方法将其转换为一个RDD。RDD可看作是分布式的对象的集合,Spark并不知道对象的详细模式信息,DataFrame可看作是分布式的Row对象的集合,其提供了由列组成的详细模式信息,使得Spark SQL可以进行某些形式的执行优化。 支持scala,java,python,R; 在java和scala中DataFrame = DataSet[Row]; DataFrame和普通的RDD的逻辑框架区别如下所示:

二者对比: DataFrame有shcema (所以是shcemaRDD) DataFrame用了压缩 + 列式存储 DataFrame不仅比RDD有更加丰富的算子,更重要的是它可以进行执行计划优化(得益于Catalyst SQL解析器),另外Tungsten项目给DataFrame的执行效率带来了很大提升(不过Tungsten优化也可能在后续开发中加入到RDD API中)。 但是在有些情况下RDD可以表达的逻辑用DataFrame无法表达,所以后续提出了Dataset API,Dataset结合了RDD和DataFrame的好处。 3.DataSet 分布式数据集,scala和java支持的较好,python支持的一般(慎用) Dataset是Spark 1.6新添加的一个实验性接口,其目的是想结合RDD的好处(强类型(这意味着可以在编译时进行类型安全检查)、可以使用强大的lambda函数)和Spark SQL的优化执行引擎的好处。可以从JVM对象构造出Dataset,然后使用类似于RDD的函数式转换算子(map/flatMap/filter等)对其进行操作。 Dataset通过Encoder实现了自定义的序列化格式,使得某些操作可以在无需解序列化的情况下直接进行。另外Dataset还进行了包括Tungsten优化在内的很多性能方面的优化。 实际上Dataset是包含了DataFrame的功能的,这样二者就出现了很大的冗余,故Spark 2.0将二者统一:保留Dataset API,把DataFrame表示为Dataset[Row],即Dataset的子集。 4.spark sql 架构图: 根据架构图可知,任何语言的dataframe的同一个操作,底层的性能都一样,因为都转成logic plan 而rdd的操作是直接作用在jvm上执行,没有logic p

推荐:Spark SQL和DataFrame的学习总结

1、DataFrame 一个以命名列组织的分布式数据集。概念上相当于关系数据库中一张表或在R / Python中的data frame数据结构,但DataFrame有丰富的优化。在spark 1.3之

lan,所以不同语言底层的性能会有些差异

5.spark三大愿景 write less code read less data les the optimizer to do hard work 6.DataFrame Api 练习 package dfimport org.apache.spark.sql.SparkSessionobject DataFrameDemo {

def main(args: Array[String]): Unit = {

val spark = SparkSession.builder().appName("DF_DEMO").master("local").getOrCreate()

/**

* 测试数据内容:

* {"id":1,"name":"zhangsan"}

* {"id":3,"name":"lisi"}

* {"id":2,"name":"wangwu"}

*/

val df = spark.read.json("file:///F:\\test\\1.json")

//1.展示df的内容, show方法默认展示20行, 每列限制20个字符,超出就截断

df.show()

//2.打印schema

df.printSchema()

//3.查询id列

df.select("id").show()

df.select(df("id")).show()

//需要引入隐式转换

import spark.implicits._

df.select('id).show()

df.select($"id").show()

//4.group by (借助count转为DataFrame)

df.groupBy("id").count().show()

//5.使用sql的写法

//createGlobalTempView会把表people_tbl建在global_temp数据库下

df.createGlobalTempView("people_tbl")

//查询时候要指定数据库global_temp, 否则会报错找不到表!!!

//

spark.sql("select * from people_tbl").show()

spark.sql("select * from global_temp.people_tbl").show()

//global temp view在一个application的多个session中都可见!!!

spark.newSession().sql("SELECT * FROM global_temp.people_tbl").show()

}}

推荐:Spark SQL and DataFrame for Spark 1.3

Spark SQL and DataFrame Guide 启动Start Shell [jifeng@feng03 spark-1.3.0-bin-hadoop2.4]$ ./bin/spark-shell Spark assembly has been built with Hive, i

1.什么是spark-sql? spark-sql 不是sql,它是spark提供的处理结构化数据的框架,不仅仅是一个sql框架,还支持DataFrame和DataSet hive on spark 是hive提供的以spark作为计算引擎的计算框架,

相关阅读排行


相关内容推荐

最新文章

×

×

请激活账号

为了能正常使用评论、编辑功能及以后陆续为用户提供的其他产品,请激活账号。

您的注册邮箱: 修改

重新发送激活邮件 进入我的邮箱

如果您没有收到激活邮件,请注意检查垃圾箱。