@@ -38,6 +38,8 @@ use std::fs;
3838#[ cfg( feature = "rayon" ) ]
3939use std:: fs:: File ;
4040use std:: path:: PathBuf ;
41+ use arrow:: datatypes:: SchemaRef ;
42+ use atomic_counter:: ConsistentCounter ;
4143
4244#[ cfg( feature = "rayon" ) ]
4345use crate :: chunked:: arrow_converter:: { MasterBuilders , Slice2Arrow } ;
@@ -47,6 +49,7 @@ use crate::chunked::residual_slicer::ResidualSlicer;
4749use crate :: chunked:: self_converter:: SampleSliceAggregator ;
4850#[ cfg( feature = "rayon" ) ]
4951use crate :: chunked:: { find_last_nl, line_break_len_cr, Converter as ChunkedConverter , Slicer } ;
52+ use crate :: chunked:: threaded_file_output:: output_factory;
5053use crate :: converter:: Converter ;
5154use crate :: error:: Result ;
5255use crate :: mocker:: Mocker ;
@@ -59,6 +62,14 @@ enum Converters {
5962 None ,
6063}
6164
65+ #[ cfg( feature = "rayon" ) ]
66+ #[ derive( clap:: ValueEnum , Clone ) ]
67+ pub ( crate ) enum Targets {
68+ Parquet ,
69+ IPC ,
70+ None ,
71+ }
72+
6273#[ cfg( feature = "rayon" ) ]
6374#[ derive( clap:: ValueEnum , Clone ) ]
6475enum Slicers {
@@ -77,6 +88,13 @@ enum Slicers {
7788pub struct Cli {
7889 #[ command( subcommand) ]
7990 command : Commands ,
91+ #[ arg(
92+ long = "target" ,
93+ value_name = "TARGET-ENCODING" ,
94+ action = ArgAction :: Set ,
95+ default_value = "Parquet" ,
96+ ) ]
97+ target : Targets ,
8098
8199 /// Set the number of threads (logical cores) to use when multi-threading.
82100 #[ arg(
@@ -89,6 +107,7 @@ pub struct Cli {
89107 n_threads : usize ,
90108}
91109
110+
92111#[ derive( Subcommand ) ]
93112enum Commands {
94113 /// Convert a fixed-length file (.flf) to parquet.
@@ -275,12 +294,14 @@ impl Cli {
275294 schema. to_path_buf ( ) ,
276295 n_threads as i16 ,
277296 ) ;
278-
297+ let sc=master_builders. schema_factory ( ) ;
298+
279299 let s2a: Box < Slice2Arrow > = Box :: new ( Slice2Arrow {
280300 fn_line_break : find_last_nl,
281301 fn_line_break_len : line_break_len_cr,
282302 masterbuilders : master_builders,
283303 consistent_counter : ConsistentCounter :: new ( 0 ) ,
304+ threaded_write : output_factory ( self . target . clone ( ) , sc , out_file. clone ( ) . to_path_buf ( ) ) ,
284305 } ) ;
285306 s2a
286307 }
0 commit comments