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

目录
相关文章
|
7天前
|
SQL JSON 分布式计算
【赵渝强老师】Spark SQL的数据模型:DataFrame
本文介绍了在Spark SQL中创建DataFrame的三种方法。首先,通过定义case class来创建表结构,然后将CSV文件读入RDD并关联Schema生成DataFrame。其次,使用StructType定义表结构,同样将CSV文件读入RDD并转换为Row对象后创建DataFrame。最后,直接加载带有格式的数据文件(如JSON),通过读取文件内容直接创建DataFrame。每种方法都包含详细的代码示例和解释。
|
9天前
|
SQL 数据挖掘 Python
数据分析编程:SQL,Python or SPL?
数据分析编程用什么,SQL、python or SPL?话不多说,直接上代码,对比明显,明眼人一看就明了:本案例涵盖五个数据分析任务:1) 计算用户会话次数;2) 球员连续得分分析;3) 连续三天活跃用户数统计;4) 新用户次日留存率计算;5) 股价涨跌幅分析。每个任务基于相应数据表进行处理和计算。
|
1月前
|
SQL 分布式计算 大数据
大数据-97 Spark 集群 SparkSQL 原理详细解析 Broadcast Shuffle SQL解析过程(一)
大数据-97 Spark 集群 SparkSQL 原理详细解析 Broadcast Shuffle SQL解析过程(一)
42 0
|
1月前
|
SQL 分布式计算 算法
大数据-97 Spark 集群 SparkSQL 原理详细解析 Broadcast Shuffle SQL解析过程(二)
大数据-97 Spark 集群 SparkSQL 原理详细解析 Broadcast Shuffle SQL解析过程(二)
78 0
|
1月前
|
SQL 分布式计算 Java
大数据-96 Spark 集群 SparkSQL Scala编写SQL操作SparkSQL的数据源:JSON、CSV、JDBC、Hive
大数据-96 Spark 集群 SparkSQL Scala编写SQL操作SparkSQL的数据源:JSON、CSV、JDBC、Hive
34 0
|
1月前
|
SQL 分布式计算 大数据
大数据-94 Spark 集群 SQL DataFrame & DataSet & RDD 创建与相互转换 SparkSQL
大数据-94 Spark 集群 SQL DataFrame & DataSet & RDD 创建与相互转换 SparkSQL
50 0
|
1月前
|
SQL 存储 分布式计算
大数据-93 Spark 集群 Spark SQL 概述 基本概念 SparkSQL对比 架构 抽象
大数据-93 Spark 集群 Spark SQL 概述 基本概念 SparkSQL对比 架构 抽象
37 0
|
3月前
|
SQL Java 数据库连接
JDBC连接SQL Server2008 完成增加、删除、查询、修改等基本信息基本格式及示例代码
这篇文章提供了使用JDBC连接SQL Server 2008数据库进行增加、删除、查询和修改操作的基本步骤和示例代码。
|
3月前
|
SQL 存储 分布式计算
|
3月前
|
SQL 数据库 索引
SQL 编程最佳实践简直太牛啦!带你编写高效又可维护的 SQL 代码,轻松应对数据库挑战!
【8月更文挑战第31天】在SQL编程中,高效与可维护的代码至关重要,不仅能提升数据库性能,还降低维护成本。本文通过案例分析探讨SQL最佳实践:避免全表扫描,利用索引加速查询;合理使用JOIN,避免性能问题;避免使用`SELECT *`,减少不必要的数据传输;使用`COMMIT`和`ROLLBACK`确保事务一致性;添加注释提高代码可读性。遵循这些实践,不仅提升性能,还便于后期维护和扩展。应根据具体情况选择合适方法并持续优化SQL代码。
53 0