Redian新闻
>
用 Spark SQL 进行结构化数据处理 | Linux 中国

用 Spark SQL 进行结构化数据处理 | Linux 中国

科技
 
导读:Spark SQL 是 Spark 生态系统中处理结构化格式数据的模块。它在内部使用 Spark Core API 进行处理,但对用户的使用进行了抽象。这篇文章深入浅出地告诉你 Spark SQL 3.x 的新内容。
本文字数:2257,阅读时长大约:3分钟

有了 Spark SQL,用户可以编写 SQL 风格的查询。这对于精通结构化查询语言或 SQL 的广大用户群体来说,基本上是很有帮助的。用户也将能够在结构化数据上编写交互式和临时性的查询。Spark SQL 弥补了弹性分布式数据集(resilient distributed data sets)(RDD)和关系表之间的差距。RDD 是 Spark 的基本数据结构。它将数据作为分布式对象存储在适合并行处理的节点集群中。RDD 很适合底层处理,但在运行时很难调试,程序员不能自动推断模式(schema)。另外,RDD 没有内置的优化功能。Spark SQL 提供了数据帧(DataFrame)和数据集来解决这些问题。

Spark SQL 可以使用现有的 Hive 元存储、SerDes 和 UDF。它可以使用 JDBC/ODBC 连接到现有的 BI 工具。

数据源

大数据处理通常需要处理不同的文件类型和数据源(关系型和非关系型)的能力。Spark SQL 支持一个统一的数据帧接口来处理不同类型的源,如下所示。

◈ 文件:
◈ CSV
◈ Text
◈ JSON
◈ XML
◈ JDBC/ODBC:
◈ MySQL
◈ Oracle
◈ Postgres
◈ 带模式的文件:
◈ AVRO
◈ Parquet
◈ Hive 表:
◈ Spark SQL 也支持读写存储在 Apache Hive 中的数据。

通过数据帧,用户可以无缝地读取这些多样化的数据源,并对其进行转换/连接。

Spark SQL 3.x 的新内容

在以前的版本中(Spark 2.x),查询计划是基于启发式规则和成本估算的。从解析到逻辑和物理查询计划,最后到优化的过程是连续的。这些版本对转换和行动的运行时特性几乎没有可见性。因此,由于以下原因,查询计划是次优的:

◈ 缺失和过时的统计数据
◈ 次优的启发式方法
◈ 错误的成本估计

Spark 3.x 通过使用运行时数据来迭代改进查询计划和优化,增强了这个过程。前一阶段的运行时统计数据被用来优化后续阶段的查询计划。这里有一个反馈回路,有助于重新规划和重新优化执行计划。

Figure 1: Query planning

自适应查询执行(AQE)

查询被改变为逻辑计划,最后变成物理计划。这里的概念是“重新优化”。它利用前一阶段的可用数据,为后续阶段重新优化。正因为如此,整个查询的执行要快得多。

AQE 可以通过设置 SQL 配置来启用,如下所示(Spark 3.0 中默认为 false):

  1. spark.conf.set(“spark.sql.adaptive.enabled”,true)

动态合并“洗牌”分区

Spark 在“洗牌(shuffle)”操作后确定最佳的分区数量。在 AQE 中,Spark 使用默认的分区数,即 200 个。这可以通过配置来启用。

  1. spark.conf.set(“spark.sql.adaptive.coalescePartitions.enabled”,true)

动态切换连接策略

广播哈希是最好的连接操作。如果其中一个数据集很小,Spark 可以动态地切换到广播连接,而不是在网络上“洗牌”大量的数据。

动态优化倾斜连接

如果数据分布不均匀,数据会出现倾斜,会有一些大的分区。这些分区占用了大量的时间。Spark 3.x 通过将大分区分割成多个小分区来进行优化。这可以通过设置来启用:

  1. spark.conf.set(“spark.sql.adaptive.skewJoin.enabled”,true)

Figure 2: Performance improvement in Spark 3.x (Source: Databricks)

其他改进措施

此外,Spark SQL 3.x还支持以下内容。

动态分区修剪

3.x 将只读取基于其中一个表的值的相关分区。这消除了解析大表的需要。

连接提示

如果用户对数据有了解,这允许用户指定要使用的连接策略。这增强了查询的执行过程。

兼容 ANSI SQL

在兼容 Hive 的早期版本的 Spark 中,我们可以在查询中使用某些关键词,这样做是完全可行的。然而,这在 Spark SQL 3 中是不允许的,因为它有完整的 ANSI SQL 支持。例如,“将字符串转换为整数”会在运行时产生异常。它还支持保留关键字。

较新的 Hadoop、Java 和 Scala 版本

从 Spark 3.0 开始,支持 Java 11 和 Scala 2.12。Java 11 具有更好的原生协调和垃圾校正,从而带来更好的性能。Scala 2.12 利用了 Java 8 的新特性,优于 2.11。

Spark 3.x 提供了这些现成的有用功能,而无需开发人员操心。这将显着提高 Spark 的整体性能。


via: https://www.opensourceforu.com/2022/05/structured-data-processing-with-spark-sql/

作者:Phani Kiran 选题:lkxed 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出


LCTT 译者 :geekpi
💎💎💎💎
翻译: 1692.5 篇
|
贡献: 3133 天
2013-10-25
2022-05-24
https://linux.cn/lctt/geekpi
欢迎遵照 CC-BY-SA 协议规定转载,
如需转载,请在文章下留言 “转载:公众号名称”,
我们将为您添加白名单,授权“转载文章时可以修改”。


微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
值得尝试的六款 Linux 文字处理程序 | Linux 中国墨西哥Riviera Maya玛雅海滨之旅(八)Akumal Trail BeachLinux 中国开通播客频道:“开源朗读者”和“硬核观察” | Linux 中国Plex 桌面播放器现已支持 Linux | Linux 中国darktable 4.0.0:用户界面改版,改进了色彩饱和度处理 | Linux 中国如何在 Linux 桌面中启用 “激活 Linux” 水印通知 | Linux 中国在 Ubuntu Linux 如何安装 H.264 解码器 | Linux 中国使用 dnf 进行 Linux 包管理 | Linux 中国使用 watch 和 tail 命令监视 Linux 上的活动 | Linux 中国HydraPaper:一个支持多显示器的 Linux 壁纸管理器 | Linux 中国出國后的一年多(3)如何在 Fedora Linux 中安装多媒体编码器 | Linux 中国如何在 Linux 和 Windows 电脑之间共享文件 | Linux 中国放飞思想的鸽子在虚拟机中运行 Linux 的十大优点 | Linux 中国忆仙姿: 清雅温馨时忆CentOS 的继承者 AlmaLinux 9 发布 | Linux 中国我如何在 Linux 上扫描家庭照片 | Linux 中国英伟达在提升 Linux 上的 GPU 使用体验上迈出了一大步 | Linux 中国上一个说“丼”不读jǐng的人,已经被我骂哭了Linux 内核 5.18 版本正式发布,新增显卡驱动以及硬件支持 | Linux 中国Fudgie?令人惊叹的 Budgie 桌面即将登陆 Fedora Linux | Linux 中国答书家问使用 apt 进行 Linux 包管理 | Linux 中国分享 8 篇使用 Linux 命令行的技巧 | Linux 中国在 Linux 上使用 sudo 命令的 5 个理由 | Linux 中国好消息!Docker Desktop 现已支持 Linux | Linux 中国System76 与惠普合作为开发者提供功能强大的 Linux 笔记本电脑 | Linux 中国实测 Linux Mint 升级工具 | Linux 中国最适合程序员的 10 款 Linux 发行版 | Linux 中国Archinstall 新的菜单系统让安装 Arch Linux 更容易了 | Linux 中国微软还有另一个 Linux 发行版,而且是基于 Debian 的 | Linux 中国你的 Linux 启动时有几只小企鹅? | Linux 中国用 Gwenview 在 Linux 上裁剪和调整照片大小 | Linux 中国Fedora Linux 36 发布 | Linux 中国
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。