十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

SparkSQL 之 DataSet 存储代码实现

SparkSQL 之 DataSet 存储代码实现 SparkSQL 之 DataSet 存储代码实现摘要DataFrameWriter 提供了统一的写出 API。本文从 6 步流水线、SaveMode 四模式、partitionBy/bucketBy、四大格式对比、saveAsTable/insertInto、文件数控制六个维度配合 2 张架构图 代码实例全面掌握 Dataset 存储的最佳实践。关键词DataFrameWriter, SaveMode, partitionBy, bucketBy, saveAsTable, Parquet, ORC, coalesce一、开篇df.write.format(parquet).mode(overwrite).partitionBy(dt).save(path)// 便捷 API: df.write.parquet(path) / df.write.json(path) / df.write.csv(path)二、写出流水线 SaveModeSaveMode模式行为Append追加Overwrite覆盖删除旧数据ErrorIfExists目录存在则报错(默认)Ignore目录存在则跳过分区与分桶// 分区: /path/dt2024-01-01/hour12/df.write.partitionBy(dt,hour).parquet(path)// 分桶: 10 个桶文件每个桶内按 ts 排序df.write.bucketBy(10,user_id).sortBy(ts).saveAsTable(tbl)三、存储格式 Hive 表写出格式选型格式特点Parquet默认·列式·Spark原生ORCHive原生·压缩略优JSON可读·体积 3-5xCSV通用·体积 5-10xsaveAsTable vs insertInto// saveAsTable: 自动建表df.write.mode(overwrite).saveAsTable(db.tbl)// insertInto: 表必须已存在按列位置匹配df.write.mode(append).insertInto(db.tbl)四、文件数控制df.coalesce(4).write.parquet(path)// 无 shuffle → 4 文件df.repartition(4).write.parquet(path)// shuffle → 4 文件五、总结写出流程write→format→mode→partitionBy→option→save格式默认 ParquetHive 用 ORC交换用 JSON/CSV技巧coalesce 减少小文件·bucketBy 加速 JOIN·insertInto 注意列位置作者starzy博客blog.starzy.cnGitHubstarzy1990.github.io专注 AI Agent · LangGraph · RAG · 大数据架构 · 数据工程实践
返回列表