Spark之SparkSQL数据源

SparkSQL数据源:parquet Json Mysql Hive:

SparkSQL数据源

手动指定选项

Spark SQL的DataFrame接口支持多种数据源的操作。一个DataFrame可以进行RDD的方式的操作,也可以被注册为临时表。把DataFrame注册为临时表之后,就可以对该DataFrame执行SQL查询。

Spark SQL的默认数据源为Parquet格式。数据源为Parquet文件时,Spark SQL可以方便的执行所有的操作。修改配置项spark.sql.sources.default,可修改默认数据源格式。

1
2
3
val df = spark.read.load("/input/sparksql/users.parquet") 
df.show()
df.select("name","favorite_color").write.save("/output/sparksql_out/namesAndFavColors.parquet")

当数据源格式不是parquet格式文件时,需要手动指定数据源的格式。数据源格式需要指定全名(例如:org.apache.spark.sql.parquet),如果数据源格式为内置格式,则只需要指定简称定json, parquet, jdbc, orc, libsvm, csv, text来指定数据的格式。可以通过SparkSession提供的read.load方法用于通用加载数据,使用write和save保存数据。

1
2
3
val peopleDF = spark.read.format("json").load("/input/sparksql/people.json")
peopleDF.show()
peopleDF.write.format("parquet").save("/output/sparksql_out/namesAndAges.parquet")

同时也可以直接运行SQL在文件上:

1
2
3
4
val sqlDF = spark.sql("SELECT * FROM parquet.`/output/sparksql_out/namesAndAges.parquet`")
sqlDF.show()
val sqlDF = spark.sql("SELECT * FROM parquet.`/output/sparksql_out/namesAndAges.parquet`")
sqlDF.show()

文件保存选项

SaveMode定义了对数据的处理模式,这些保存模式不使用任何锁定,f非原子操作。当使用Overwrite方式执行时,在输出新数据之前原数据就已经被删除。

Scala/JavaAny LanguageMeaning
SaveMode.ErrorIfExists(default)“error”(default)如果文件存在,则报错
SaveMode.Append“append”追加
SaveMode.Overwrite“overwrite”覆写
SaveMode.Ignore“ignore”数据存在,则忽略

Parquet格式

Parquet是面向分析型业务的列式存储格式,由Twitter和Cloudera合作开发,2015年5月从Apache的孵化器里毕业成为Apache顶级项目。

Parquet文件是以二进制方式存储的,所以是不可以直接读取的,文件中包括该文件的数据和元数据,因此Parquet格式文件是自解析的。

通常情况下,在存储Parquet数据的时候会按照Block大小设置行组的大小,由于一般情况下每一个Mapper任务处理数据的最小单位是一个Block,这样可以把每一个行组由一个Mapper任务处理,增大任务执行并行度。

k9A97d.png

Parquet文件的内容,一个文件中可以存储多个行组,文件的首位都是该文件的Magic Code,用于校验它是否是一个Parquet文件,Footer length记录了文件元数据的大小,通过该值和文件长度可以计算出元数据的偏移量,文件的元数据中包括每一个行组的元数据信息和该文件存储数据的Schema信息。除了文件中每一个行组的元数据,每一页的开始都会存储该页的元数据,在Parquet中,有三种类型的页:数据页、字典页和索引页。数据页用于存储当前行组中该列的值,字典页存储该列值的编码字典,每一个列块中最多包含一个字典页,索引页用来存储当前行组下该列的索引,目前Parquet中还不支持索引页。

1
2
3
4
import spark.implicits._

val peopleDF = spark.read.json("/input/sparksqls/people.json")
peopleDF.write.parquet("hdfs://datanode1:9000/people.parquet")
1. 配置SparkSQL数据源 在DolphinScheduler的web管理页面中,点击左侧的“数据源”菜单,然后点击“新增”按钮,在弹出的页面中选择“SparkSQL数据源类型,填写相关配置信息,如下图所示: ![image.png](https://cdn.nlark.com/yuque/0/2022/png/215728/1644455710852-7e500e9c-7d03-453b-9d7e-17b1c7e8510d.png#clientId=u7f8b614c-2d08-4&from=paste&id=ua1e4f4e4&margin=%5Bobject%20Object%5D&originHeight=1184&originWidth=2542&originalType=binary&ratio=1&status=done&style=none&taskId=u6d5f7a55-6a8e-4dcd-9d3a-3a6f4b6a4b6) 其中,配置信息的具体含义如下: - 数据源名称:自定义数据源的名称,例如“SparkSQL”; - 数据源类型:选择“SparkSQL”; - JDBC URL:填写SparkSQL连接的JDBC URL,例如“jdbc:spark://localhost:7077”; - 用户名:填写SparkSQL连接的用户名,例如“root”; - 密码:填写SparkSQL连接的密码,例如“123456”。 2. 测试SparkSQL数据源 配置完成后,点击“测试连接”按钮,测试数据源是否能够连接成功。如果连接成功,则会出现“连接成功”的提示信息;如果连接失败,则会出现“连接失败”的提示信息。 3. 在任务中使用SparkSQL数据源 在DolphinScheduler的web管理页面中,点击左侧的“任务”菜单,然后点击“新增”按钮,在弹出的页面中选择要创建的任务类型(例如“SQL”任务),然后填写任务相关信息,如下图所示: ![image.png](https://cdn.nlark.com/yuque/0/2022/png/215728/1644455731711-6558c0b9-7a63-4f1f-aa8a-08e2d63c94f6.png#clientId=u7f8b614c-2d08-4&from=paste&id=udbcb1c3d&margin=%5Bobject%20Object%5D&originHeight=1184&originWidth=2542&originalType=binary&ratio=1&status=done&style=none&taskId=u9f7a46d1-1f7a-4aa2-8d45-71e84d7c1a9) 其中,配置信息的具体含义如下: - 任务名称:自定义任务的名称,例如“SparkSQL任务”; - 任务类型:选择要创建的任务类型,例如“SQL”任务; - 数据源类型:选择“SparkSQL”; - SQL语句:填写要执行的SQL语句,例如“select * from table”; - 运行参数:填写任务的运行参数,例如“--executor-memory 512m”。 配置完成后,点击“保存”按钮,保存任务信息。然后,点击“运行”按钮,运行任务。如果任务能够正常运行,则会出现“运行成功”的提示信息;如果任务运行失败,则会出现“运行失败”的提示信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值