我想将数据集写入CSV文件,但我不希望列以升序(或与此相关的任何顺序)进行排序。
例如表:字符串ID;字符串名称;琴弦时代+300个其他字段
形成的CSV具有模式:年龄名称ID +另外300列按字母顺序排列
但是我想要与Model顺序相同的CSV。
我本可以使用.select()或.selectExpr()方法,但我不得不提到300多个字段。
还有其他方法,更简单的方法。
当前正在使用:
dataset.toDF().coalesce(1).selectExpr("templateId","batchId", +300 more fields ).write().format("com.databricks.spark.csv").option("nullValue","").mode(SaveMode.Overwrite).save(path);
我针对上述问题采取的解决方法:
在广播地图中加载属性文件的代码:
public static Map<String, String> getColumnMap() {
String propFileName = "column.properties";
InputStream inputStream =
ConfigurationLoader.class.getClassLoader().getResourceAsStream(propFileName);
if (inputStream != null) {
try {
prop.load(inputStream);
colMap = (Map) prop;
} catch (IOException e) {
// handle exception
}
}
return colMap;
}
JavaSparkContext sc = JavaSparkContext.fromSparkContext(sparkSession.sparkContext());
Broadcast<Map<String, String>> broadcastProperty = sc.broadcast(propertiesMap);
写入CSV文件的代码:
dataset.toDF().coalesce(1).selectExpr(broadcastColumn.getValue().get(TemplateConstants.COLUMN).split(",")).write().format(ApplicationConstants.CSV_FORMAT).option(ApplicationConstants.NULL_VALUE, "").mode(SaveMode.Overwrite).save(path);