当前位置: 首页> 财经> 创投人物 > 优设网免费素材_广州市地铁最新消息_网络营销的概念和含义_河南品牌网站建设

优设网免费素材_广州市地铁最新消息_网络营销的概念和含义_河南品牌网站建设

时间:2025/8/28 19:49:36来源:https://blog.csdn.net/2402_88408747/article/details/147230890 浏览次数:0次
优设网免费素材_广州市地铁最新消息_网络营销的概念和含义_河南品牌网站建设

简介

1. Spark-SQL概述:Spark SQL是Spark处理结构化数据的模块,前身是Shark。Shark基于Hive开发,提升了SQL-on-Hadoop的性能,但对Hive的过度依赖制约了Spark发展。SparkSQL抛弃Shark代码,汲取其优点后重新开发,在数据兼容、性能优化、组件扩展上优势明显。Shark停止开发后,衍生出SparkSQL和Hive on Spark。SparkSQL简化RDD开发,提供DataFrame和DataSet两个编程抽象 。

2. Spark-SQL特点:一是易整合,能无缝融合SQL查询与Spark编程;二是统一数据访问,以相同方式连接不同数据源;三是兼容Hive,可在已有Hive仓库运行SQL或HQL;四是支持标准数据连接,借助JDBC或ODBC连接 。

3. DataFrame解析:DataFrame是基于RDD的分布式数据集,类似二维表格,带有schema元信息,每列有名称和类型。这使Spark SQL能优化数据源和变换操作,性能优于RDD。其API提供高层关系操作,支持嵌套数据类型,查询计划由Spark catalyst optimiser优化,执行效率高 。

4. DataSet解析:DataSet是分布式数据集合,是DataFrame的扩展。它具备RDD的强类型和lambda函数能力,以及Spark SQL优化执行引擎的优势。使用样例类定义数据结构,具有类型安全检查和查询优化特性,DataFrame是DataSet的特例(DataFrame=DataSet[Row]),二者可相互转换 。

核心编程

1. Spark SQL上下文环境:Spark SQL是对Spark Core的封装,其上下文环境对象也经过封装。早期版本有SQLContext和HiveContext两种查询起始点,分别用于Spark自身SQL查询和连接Hive查询。而SparkSession是最新的查询起始点,它整合了SQLContext和HiveContext的功能,内部封装了SparkContext,在spark - shell中会自动创建名为spark的SparkSession对象。

2. DataFrame创建:SparkSession是创建DataFrame和执行SQL的入口,创建方式有三种,包括从Spark数据源创建,例如读取spark的bin/data目录下的user.json文件来创建DataFrame;从现有RDD转换;从Hive Table查询返回。同时要注意从文件读取数字时数据类型的处理,默认用bigint接收。

3. 基于SQL语法的DataFrame操作:使用SQL语法查询DataFrame时,需要临时视图或全局视图辅助。以读取user.json文件创建DataFrame为例,先创建DataFrame,接着为其创建临时表,然后通过SQL语句查询全表并展示结果。创建全局表时,首次运行可能因缺少配置报错,需将hive - site.xml文件复制到spark的conf路径下,配置完成后创建全局表并进行查询展示

4. DataFrame的DSL语法:DataFrame提供DSL用于管理结构化数据,支持在多种语言中使用,且无需创建临时视图。操作包括创建DataFrame,查看Schema信息,如通过 printSchema 方法;选择特定列数据,如 select("username") ;进行列运算,运算时列需用 $ 或引号表达式;数据过滤,依据条件筛选数据;按列分组统计数据条数 。

5. RDD转换为DataFrame:在IDEA开发时,RDD与DF或DS互操作需导入 import spark.implicits._ ,且 spark 是SparkSession对象变量名,需先创建该对象,且只能用 val 修饰。在spark-shell中无需手动导入。RDD可直接调用 toDF 方法转换,实际开发常借助样例类实现 。

6. DataFrame转换为RDD:DataFrame是对RDD的封装,可直接获取内部RDD。获取后RDD存储类型为 Row ,通过 collect 方法收集数据,可使用 getAs 方法按列名获取具体值 

7.DataSet操作:DataSet具有强类型特性,创建方式多样。可使用样例类序列,如定义 Person 样例类后,通过 Seq(Person("zhangsan",2)).toDS() 创建;也能用基本类型序列创建,但实际中更多从RDD转换得到。RDD可自动转换为DataSet,借助样例类定义结构,属性反射成列名。DataSet可直接获取内部RDD 。

8. DataFrame与DataSet转换:DataFrame是DataSet的特例,二者可相互转换。DataFrame转DataSet需借助样例类,使用 as 方法;DataSet转DataFrame则调用 toDF 方法 。

9. RDD、DataFrame、DataSet关系:从版本演进看,RDD在Spark1.0出现,DataFrame于Spark1.3诞生,Dataset在Spark1.6引入。三者均为分布式弹性数据集,有惰性机制、共同函数,会自动缓存运算,都有分区概念,DataFrame和DataSet还能模式匹配获取字段信息。不过,RDD常与spark mllib配合,不支持sparksql操作;DataFrame每行类型为Row,访问列值需解析,支持SparkSQL操作与便捷保存方式;DataSet是DataFrame扩展,强类型且自定义样例类后可自由获取行信息 。

关键字:优设网免费素材_广州市地铁最新消息_网络营销的概念和含义_河南品牌网站建设

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: