2026年6月最新:10款AI写小说工具实测,TaoToken统一Key接入DeepSeek与Kimi
2026/10/2 22:13:26
// 创建 COW 表配置 HoodieWriteConfig writeConfig = HoodieWriteConfig.newBuilder() .withPath("s3://bucket/path") .withSchema(schema) .withTableType(HoodieTableType.COPY_ON_WRITE) .build(); // 执行写入操作 JavaSparkContext jssc = new JavaSparkContext(spark.sparkContext()); HoodieWriteConfig config = HoodieWriteConfig.newBuilder().build(); HoodieTable hoodieTable = HoodieTable.create(jssc, config);而 MOR 表的配置如下:
// 创建 MOR 表配置 HoodieWriteConfig writeConfig = HoodieWriteConfig.newBuilder() .withPath("s3://bucket/path") .withSchema(schema) .withTableType(HoodieTableType.MERGE_ON_READ) .withInsertCluster(false) // 禁用插入聚类,提高写入性能 .build(); // 执行写入操作 HoodieWriteResult result = hoodieTable.upsert(jssc.rdd(), new HoodieJavaPayload());注意事项包括:MOR 表需配置合理的合并调度策略,避免增量文件无限累积;COW 表不适合高频更新场景,否则会导致大量小文件问题;两者都需配置适当的文件大小和压缩策略,优化存储与查询性能。
| 特性 | Copy-on-Write (COW) | Merge-on-Read (MOR) |
|---|---|---|
| 写入延迟 | 低,直接写入列式存储 | 高,需维护增量文件 |
| 读取延迟 | 高,需读取完整文件 | 低,可读取最新数据 |
| 存储效率 | 较高,列式存储优化 | 一般,需维护多个文件版本 |
| 数据一致性 | 强一致性,实时可见 | 最终一致性,需异步合并 |
| 适用场景 | 频繁读取、较少更新 | 频繁更新、批量读取 |
| 资源消耗 | 写入时资源消耗高 | 读取时需额外合并资源 |
SparkSession spark = SparkSession.builder() .appName("Hudi COW Example") .master("local[*]") .getOrCreate(); // 创建 DataFrame List<String> data = Arrays.asList("1, Alice, 25", "2, Bob, 30"); Dataset<Row> df = spark.read() .format("csv") .option("header", "true") .load(data); // 写入为 Hudi COW 表 df.write() .format("org.apache.hudi") .option("hoodie.table.type", "COPY_ON_WRITE") .option("hoodie.upsert.shuffle.parallelism", "200") .option("hoodie.cleaner.fileversions.retained", "3") .option("hoodie.insert.shuffle_parallelism", "200") .mode("append") .save("s3://bucket/cow_table");SparkSession spark = SparkSession.builder() .appName("Hudi MOR Example") .master("local[*]") .getOrCreate(); // 创建 DataFrame List<String> data = Arrays.asList("3, Carol, 28", "4, David, 35"); Dataset<Row> df = spark.read() .format("csv") .option("header", "true") .load(data); // 写入为 Hudi MOR 表 df.write() .format("org.apache.hudi") .option("hoodie.table.type", "MERGE_ON_READ") .option("hoodie.upsert.shuffle.parallelism", "200") .option("hoodie.cleaner.fileversions.retained", "3") .option("hoodie.insert.shuffle_parallelism", "200") .option("hoodie.logfile.max.size", "1GB") .option("hoodie.logfile.roll.threshold", "1GB") .mode("append") .save("s3://bucket/mor_table");