DataFrame API 和 Spark SQL 互相转换 + API 速查
| 操作 | DataFrame API | Spark SQL |
|---|---|---|
| 读取表 | spark.table("t") | SELECT * FROM t |
| 过滤 | .filter($"age" > 18) | WHERE age > 18 |
| 选择列 | .select("name", "age") | SELECT name, age |
| 重命名 | .withColumnRenamed("a","b") | SELECT a AS b |
| 新增列 | .withColumn("c", $"a"+$"b") | SELECT *, a+b AS c |
| 删除列 | .drop("col") | SELECT除col外的列 |
| 分组聚合 | .groupBy("city").agg(count("*")) | SELECT city, COUNT(*) FROM t GROUP BY city |
| 排序 | .orderBy($"cnt".desc) | ORDER BY cnt DESC |
| 限制 | .limit(10) | LIMIT 10 |
| Join | a.join(b, "id", "left") | SELECT * FROM a LEFT JOIN b ON a.id=b.id |
| Union | a.union(b) | SELECT * FROM a UNION ALL SELECT * FROM b |
| 去重 | .distinct() | SELECT DISTINCT * |
| 窗口函数 | .withColumn("rn", row_number().over(w)) | ROW_NUMBER() OVER(...) AS rn |
| UDF | .withColumn("r", myUdf($"a")) | SELECT my_udf(a) AS r |
| 条件 | when($"a">0, "正").otherwise("负") | CASE WHEN a>0 THEN '正' ELSE '负' END |
| 类型转换 | .cast(StringType) | CAST(col AS STRING) |
| 展开数组 | .select(explode($"arr")) | SELECT explode(arr) |
| 写入 | .write.saveAsTable("t") | CREATE TABLE t AS SELECT ... |
| 维度 | DataFrame API | Spark SQL | 说明 |
|---|---|---|---|
| 编译优化 | Catalyst优化器 ✅ | Catalyst优化器 ✅ | 两者使用相同的查询优化器 |
| 类型安全 | 编译期检查 ✅ | 运行期检查 | DF API在编译时发现类型错误 |
| 代码生成 | Whole-Stage CodeGen ✅ | Whole-Stage CodeGen ✅ | 两者都支持 |
| Catalyst优化 | ✅ 全部 | ✅ 全部 | Predicate Pushdown/Column Pruning等 |
| 复杂逻辑 | 代码可读性好 | 嵌套SQL可读性差 | 复杂ETL推荐DF API |
| 简单查询 | 代码较长 | 更简洁直观 | 简单过滤/聚合用SQL更方便 |
| 调试 | .explain() 查看计划 | EXPLAIN 查看计划 | 两者等价 |
| 缓存 | .cache() / .persist() | CACHE TABLE t | 两者等价 |
本站不收集用户个人信息,所有工具均在浏览器本地运行,数据不会上传服务器。您可以放心使用。
TC Tools 是由个人开发维护的在线工具集合,旨在为开发者和普通用户提供便捷、实用的在线工具。所有工具均在浏览器本地运行,数据不会上传服务器。
工具异常、新增建议或合作交流,欢迎反馈:
💬 微信公众号:ai小糖罐
📩 邮箱:track_tang@126.com
1. 本工具集仅供学习交流和技术研究使用,请勿用于任何非法用途。使用本工具产生的一切后果由使用者自行承担。
2. 所有工具均在浏览器本地运行,数据不会上传服务器,但不保证数据处理结果的绝对准确性,重要场景请人工复核。
3. 法律/医疗/金融类工具仅作参考,不构成专业建议;涉及具体案件、病情或投资决策时,请咨询持牌专业人士。
4. 工具中涉及的商标、品牌名称等知识产权归原权利人所有,仅作识别用途。
5. 本站保留在法律允许范围内对本工具集进行更新、修改或下线的权利,无需另行通知。
遇到工具异常、有新工具需求或商务合作,可通过以下方式联系我们:
💬 微信公众号
搜索关注:ai小糖罐
可反馈工具异常、提交新工具建议