spark sql编程之实现合并Parquet格式的DataFrame的schema

简介: spark sql编程之实现合并Parquet格式的DataFrame的schema

首先说下什么是schema,其实这跟通俗来讲,与我们传统数据表字段的名称是一个意思。明白了这个,我们在继续往下看。


合并schema


首先创建RDD,并转换为含有两个字段"value", "square"的DataFrame

val squaresDF = spark.sparkContext.makeRDD(1 to 5).map(i => (i, i * i)).toDF("value", "square")

21de21353720b1c3423d21dca2e877c9.jpg然后以parquet格式保存

squaresDF.write.parquet("data/test_table/key=1")


然后在创建RDD,并转换为含有两个字段"value", "cube"的DataFrame

val cubesDF = spark.sparkContext.makeRDD(6 to 10).map(i => (i, i * i * i)).toDF("value", "cube")

835c3d904063ad8648bab772b6c0edc0.jpg然后以parquet格式保存


cubesDF.write.parquet("data/test_table/key=2")

最后合并schema

val mergedDF = spark.read.option("mergeSchema", "true").parquet("data/test_table")

2a5e9913d7fb6c9a69968360014b9b75.jpg

我们打印schema

mergedDF.printSchema()

e8b753e78dc83ecbd879dfa7b47b0c47.jpg

接着我们现实数据

mergedDF.show

4be30bdc539681241467fa36cc46050e.jpg

如果想合并schema需要设置mergeSchema 为true,当然还有另外一种方式是设置spark.sql.parquet.mergeSchema为true。


相关补充说明:


Hive metastore Parquet表格式转换


当读取hive的 Parquet 表时,Spark SQL为了提高性能,会使用自己的支持的Parquet,由配置 spark.sql.hive.convertMetastoreParquet控制,默认是开启的。

上面除了Parquet格式支持外,还有ProtocolBuffer, Avro, 和Thrift支持合并。


如何修改配置项:


可以通过SparkSession 的setConf 或则使用SQL命令

SET key=value

更多配置项如下:

5cc947ef714ffbb182104eef59a47c43.jpg

目录
相关文章
|
2月前
|
存储 分布式计算 Java
|
2月前
|
SQL 存储 分布式计算
|
3月前
|
SQL 分布式计算 DataWorks
DataWorks产品使用合集之怎么编写和执行Spark SQL
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
3月前
|
SQL 数据库
【SQL】已解决:SQL分组去重并合并相同数据
【SQL】已解决:SQL分组去重并合并相同数据
64 1
|
3月前
|
SQL
云架构数据倾斜问题之在SQL数据源读取查询时合并小文件如何解决
云架构数据倾斜问题之在SQL数据源读取查询时合并小文件如何解决
|
3月前
|
SQL 数据处理
SQL 能力问题之合并两个存在交叉的日期区间,如何解决
SQL 能力问题之合并两个存在交叉的日期区间,如何解决
|
5月前
|
分布式计算 关系型数据库 MySQL
Spark编程实验四:Spark Streaming编程
Spark编程实验四:Spark Streaming编程
100 2
|
5月前
|
SQL 分布式计算 关系型数据库
Spark编程实验三:Spark SQL编程
Spark编程实验三:Spark SQL编程
83 1
|
4月前
|
SQL JSON 分布式计算
|
4月前
|
SQL 分布式计算 Java