[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[netCDFJava #BNA-191717]: chunking in Java



Hi Jeff,

An alternate approach would be to avoid the whole chunking issue by writing 
netCDF-3 files instead of netCDF-4 files. But, if you do that, you don't get to 
take advantage of compression.

If you want to stick with netCDF-4, I included a few details and pointers to 
the needed methods and classes in my response on the netcdf-java list 

http://www.unidata.ucar.edu/mailing_lists/archives/netcdf-java/2014/msg00055.html

But I think it boils down to a few lines of code. I haven't tested this but 
interspersed in your code below are a few lines that I think should get you 
going.

Ethan

On 5/2/2014 8:54 AM, Jeff Johnson - NOAA Affiliate wrote:> New Ticket: chunking 
in Java
> 
> How do you set the chunk size via the Java API? I'm trying to get my file
> size down and was told by Ethan from unidata to change the chunk size from
> 1 to 2000 on the unlimited dimension, but I don't see an API to do that.
> 
> Below is my sample code.
> 
> import ucar.ma2.ArrayDouble;
> import ucar.ma2.ArrayLong;
> import ucar.ma2.DataType;
> import ucar.ma2.InvalidRangeException;
> import ucar.nc2.*;
> 
> import java.io.IOException;
> import java.nio.file.FileSystems;
> import java.nio.file.Files;
> import java.nio.file.Path;
> import java.util.ArrayList;
> import java.util.List;
> 
> public class TestGenFile2 {
>   public static void main(String[] args) {
>     NetcdfFileWriter dataFile = null;
> 
>     try {
>       try {
> 
>         // define the file
>         String filePathName = "output.nc";
> 
>         // delete the file if it already exists
>         Path path = FileSystems.getDefault().getPath(filePathName);
>         Files.deleteIfExists(path);
> 
>         // enter definition mode for this NetCDF-4 file
>         dataFile =
> NetcdfFileWriter.createNew(NetcdfFileWriter.Version.netcdf4, filePathName);

replace the above line with

Nc4Chunking chunkingStrategy = 
Nc4ChunkingStrategyImpl.factory(Nc4Chunking.Strategy.standard, 0, false);
NetcdfFileWriter.createNew(NetcdfFileWriter.Version.netcdf4, filePathName, 
chunkingStrategy);

 
>         // create the root group
>         Group rootGroup = dataFile.addGroup(null, null);
> 
>         // define dimensions, in this case only one: time
>         Dimension timeDim = dataFile.addUnlimitedDimension("time");
>         List<Dimension> dimList = new ArrayList<>();
>         dimList.add(timeDim);
> 
>         // define variables
>         Variable time = dataFile.addVariable(rootGroup, "time",
> DataType.DOUBLE, dimList);
>         dataFile.addVariableAttribute(time, new Attribute("units",
> "milliseconds since 1970-01-01T00:00:00Z"));

Add the following line here

dataFile.addVariableAttribute(time, new Attribute("_ChunkSize", new Integer( 
2000)));


> 
>         // create the file
>         dataFile.create();
> 
>         // create 1-D arrays to hold data values (time is the dimension)
>         ArrayDouble.D1 timeArray = new ArrayDouble.D1(1);
> 
>         int[] origin = new int[]{0};
>         long startTime = 1398978611132L;
> 
>         // write the records to the file
>         for (int i = 0; i < 10000; i++) {
>           // load data into array variables
>           double value = startTime++;
>           timeArray.set(timeArray.getIndex(), value);
> 
>           origin[0] = i;
> 
>           // write a record
>           dataFile.write(time, origin, timeArray);
>         }
>       } finally {
>         if (null != dataFile) {
>           // close the file
>           dataFile.close();
>         }
>       }
>     } catch (IOException | InvalidRangeException e) {
>       e.printStackTrace();
>     }
>   }
> }
> 
> thanks-
> jeff
> 


Ticket Details
===================
Ticket ID: BNA-191717
Department: Support netCDF Java
Priority: Normal
Status: Closed


NOTE: All email exchanges with Unidata User Support are recorded in the Unidata inquiry tracking system and then made publicly available through the web. If you do not want to have your interactions made available in this way, you must let us know in each email you send to us.