《SparkSQL内核剖析》【基础篇】

本文介绍了SparkSQL如何将SQL语句转换为RDD,详细阐述了从SQL到RDD的逻辑和物理计划过程,以及涉及到的Catalyst框架中的InternalRow、TreeNode和Expression等核心概念。通过分析SparkSQL的执行流程,揭示了SparkSQL在Driver端如何编译和优化SQL,为理解SparkSQL的内部机制提供了基础。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、从SQL到RDD

1. 一个简单的例子

样例数据 test.json

{
   
   "name":"上海滩","singer":"叶丽仪","album":"香港电视剧主题歌","path":"mp3/shanghaitan.mp3"},
{
   
   "name":"一生何求","singer":"陈百强","album":"香港电视剧主题歌","path":"mp3/shanghaitan.mp3"},
{
   
   "name":"红日","singer":"李克勤","album":"怀旧专辑","path":"mp3/shanghaitan.mp3"},
{
   
   "name":"爱如潮水","singer":"张信哲","album":"怀旧专辑","path":"mp3/airucaoshun.mp3"},
{
   
   "name":"红茶馆","singer":"陈惠嫻","album":"怀旧专辑","path":"mp3/redteabar.mp3"}

SparkSQL读进来,得到DataFrame

scala> spark.read.json("test.json")
res1: org.apache.spark.sql.DataFrame = [album: string, name: string ... 2 more fields]

scala> res1.show(false)
+--------+----+-------------------+------+
|album   |name|path               |singer|
+--------+----+-------------------+------+
|香港电视剧主题歌|上海滩 |mp3/shanghaitan.mp3|叶丽仪   |
|香港电视剧主题歌|一生何求|mp3/shanghaitan.mp3|陈百强   |
|怀旧专辑    |红日  |mp3/shanghaitan.mp3|李克勤   |
|怀旧专辑    |爱如潮水|mp3/airucaoshun.mp3|张信哲   |
|怀旧专辑    |红茶馆 |mp3/redteabar.mp3  |陈惠嫻   |
+--------+----+-------------------+------+

执行个简单的查询

scala> res1.createOrReplaceTempView("test")
scala> spark.sql(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值