@@ -58,18 +58,23 @@ class ParticleFile:
5858 Interval which dictates the update frequency of file output
5959 while ParticleFile is given as an argument of ParticleSet.execute()
6060 It is either a numpy.timedelta64, a datimetime.timedelta object or a positive float (in seconds).
61+ compression : {"zstd", "gzip", "snappy", "brotli", None}, optional
62+ Compression algorithm to use for the Parquet file. Default is "zstd".
6163
6264 Returns
6365 -------
6466 ParticleFile
6567 ParticleFile object that can be used to write particle data to file
6668 """
6769
68- def __init__ (self , path : PathLike , outputdt ):
70+ def __init__ (
71+ self , path : PathLike , outputdt , compression : Literal ["zstd" , "gzip" , "snappy" , "brotli" , None ] = "zstd"
72+ ):
6973 if not isinstance (outputdt , (np .timedelta64 , timedelta , float )):
7074 raise ValueError (
7175 f"Expected outputdt to be a np.timedelta64, datetime.timedelta or float (in seconds), got { type (outputdt )} "
7276 )
77+ self ._compression = compression
7378
7479 outputdt = timedelta_to_float (outputdt )
7580 path = Path (path )
@@ -133,7 +138,11 @@ def write(self, pset: ParticleSet, time, indices=None):
133138
134139 if self ._writer is None :
135140 assert not self .path .exists (), "If the file exists, the writer should already be set"
136- self ._writer = pq .ParquetWriter (self .path , _get_schema (pclass , self .metadata , pset .fieldset .time_interval ))
141+ self ._writer = pq .ParquetWriter (
142+ self .path ,
143+ _get_schema (pclass , self .metadata , pset .fieldset .time_interval ),
144+ compression = self ._compression ,
145+ )
137146
138147 if isinstance (time , (np .timedelta64 , np .datetime64 )):
139148 time = timedelta_to_float (time - time_interval .left )
0 commit comments