- 1、本文档共16页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第10章 Spark SQL编程;10.1 Spark SQL概述;1. 查询优化器Catalyst
2. 程序入口
Spark 1.x中Spark SQL程序入口为:SQLContext和HiveContext。但在Spark 2.0中SparkSession替代了SQLContext和HiveContext。尽管如此,Spark是向低版本兼容的。
;Spark 2.0的Spark SQL中,SparkSession,位于包org.apache.spark.sql.SparkSession中,其对象的创建如下:
SparkSession spark = SparkSession.builder().appName(Java Spark SQL Example).config(spark.some.config.option, some-value).getOrCreate();
;类;方法;10.2 DataFrame;所谓“反射机制”就是程序在运行时允许它透过反射取得任何一个类的内部信息,包括:正在运行中的类的属性信息、方法信息、构造信息、类的访问修饰符等,也就是说能够动态获取类的实例的信息和动态调用其成员方法。Java语言支持反射机制,大大增强了Java程序的灵活性。
源代码见P276.;当JavaBean不能被预先定义的时候,可以通过编程接口指定Schema。??方式构造一个不存在的Schema并将其应用在已知的RDD上。编程创建DataFrame分为三步:
(1) 从原来的RDD创建一个Row(行)格式的RDD。
(2) 创建与RDD中Rows结构匹配的StructType,通过该StructType创建表示RDD的Schema。
(3) 通过SparkSession提供的createDataFrame方法创建DataFrame,以应用Schema到RDD的Rows结构中。
StructField field = DataTypes.createStructField(fieldName, DataTypes.StringType, true);
;10.3 数据源;最简单的方式是调用load方法加载文件,默认加载的文件格式为parquet,可以修改 spark.sql.sources.default 指定默认的格式。也可以指定其它数据源如json、parquet、jdbc等。Spark能从parquet、json、txt、hive等获取数据,也能将数据保存为这种数据格式。以下代码是以默认格式加载和保存数据。
;Parquet是面向分析型业务的列式存储格式,由Twitter和Cloudera合作开发,2015年5月从Apache的孵化器里毕业成为Apache顶级项目。Spark SQL提供了对Parquet文件的读写操作,是数据保存的默认格式。列式存储相比行式存储有很大的优势,可以跳过不符合条件的数据,只读取需要的数据,降低I/O数据量。
;JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。Spark SQL能自动引用JSON数据集并加载为DatasetRow。通过SparkSession.read.json()方法读取一个JSON字符串或者JSON文件。
源代码见教材P280。
;JDBC(Java Data Base Connectivity,Java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。在Spark中提供了一个JdbcRDD类,该RDD就是读取使用JDBC的数据源,如MySQL、SQLServer等关系型数据库,并将其中的数据并转换成RDD,之后就可以对该RDD进行各种的操作。;案例源代码见教材P282.;10.4 Spark Streaming与Spark SQL综合案例
文档评论(0)