本文介绍在 java 版 apache spark 中,如何在 `dataset.select()` 阶段直接添加带固定值的新列(常量列),避免后期手动修改 csv 文件,确保导出数据结构完整、高效且符合生产规范。
在 Spark SQL 的 Java API 中,向 Dataset
以下是在您原有代码中插入常量列的正确写法:
import static org.apache.spark.sql.functions.*; private static void buildReport(FileSystem fileSystem, DatasetjoinedDs, String reportName) throws IOException { Path report = new Path(reportName); joinedDs.filter(aFilter) .select( joinedDs.col("AGREEMENT_ID"), lit("REPORT_V1").as("REPORT_VERSION"), // ✅ 常量列:值为字符串 "REPORT_V1",别名为 "REPORT_VERSION" joinedDs.col("ERROR_MESSAGE") ) .write() .format("csv") .option("header", "true") // 注意:布尔值应传字符串 "true"/"false" .option("sep", ",") .csv(reportName); fileSystem.copyToLocalFile(report, new Path(reportName + ".csv")); }
? 关键说明与注意事项:
,而非 lit(new Timestamp(...))(后者会固化为作业提交时刻的静态值); 通过此方式,您可在数据写出前统一增强 Schema,既保持 ETL 流程的声明式风格,又确保 CSV 输出开箱即用,无需额外文本处理步骤。