package com.se.simu.utils; import com.bc.zarr.ArrayParams; import com.bc.zarr.DataType; import com.bc.zarr.ZarrArray; import com.bc.zarr.ZarrGroup; import org.apache.commons.csv.CSVFormat; import org.apache.commons.csv.CSVParser; import org.apache.commons.csv.CSVRecord; import java.io.FileReader; import java.io.IOException; import java.nio.file.Path; import java.nio.file.Paths; public class ZarrUtils { public static void main(String[] args) throws Exception{ // 输入 CSV 文件的路径 String csvFilePath = "D:\\城市内涝\\sem\\雨量站点数据\\雨量站包含坐标.csv"; // 输出 Zarr 文件的路径 String zarrFilePath = "D:\\城市内涝\\sem\\雨量站点数据\\雨量站包含坐标.zarr"; try (CSVParser csvParser = new CSVParser(new FileReader(csvFilePath), CSVFormat.DEFAULT.withFirstRecordAsHeader())) { // 获取 CSV 列数 int numColumns = csvParser.getHeaderMap().size(); // 计算 CSV 行数 int numRows = 0; for (CSVRecord record : csvParser) { numRows++; } // 重新初始化 CSV 解析器,因为之前的遍历已经耗尽了迭代器 csvParser.close(); CSVParser csvRecords = new CSVParser(new FileReader(csvFilePath), CSVFormat.DEFAULT.withFirstRecordAsHeader()); // 创建 Zarr 组 Path zarrPath = Paths.get(zarrFilePath); ZarrGroup zarrGroup = ZarrGroup.create(zarrPath); // 定义 Zarr 数组的维度 int[] shape = {numRows, numColumns}; // 定义分块大小 int[] chunks = {1440}; // 创建 Zarr 数组 ArrayParams params=new ArrayParams(); params.shape(chunks); params.chunks(chunks); params.dataType(DataType.f4); ZarrArray zarrArray = zarrGroup.createArray("rainfall",params); int rowIndex = 0; for (CSVRecord record : csvRecords) { int[] x={rowIndex}; // for (int colIndex = 0; colIndex < numColumns; colIndex++) { // //double value = Double.parseDouble(record.get(colIndex)); // String value = record.get(colIndex); // int[] y={colIndex}; // //zarrArray.write(value); // zarrArray.write(value,x,y); // } double value = Double.parseDouble(record.get(1)); zarrArray.write(value); rowIndex++; } // 关闭 Zarr 组 //zarrGroup.close(); } catch (IOException e) { e.printStackTrace(); } } }