张洋洋
2025-01-10 1f6411206bd588e0c39ed3c34481ff8441f23e39
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
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();
        }
    }
 
}