@@ -93,6 +93,57 @@ fn array_cat(exprs: Vec<PyExpr>) -> PyExpr {
9393 array_concat ( exprs)
9494}
9595
96+ #[ pyfunction]
97+ fn array_distance ( array1 : PyExpr , array2 : PyExpr ) -> PyExpr {
98+ let args = vec ! [ array1. into( ) , array2. into( ) ] ;
99+ Expr :: ScalarFunction ( datafusion:: logical_expr:: expr:: ScalarFunction :: new_udf (
100+ datafusion:: functions_nested:: distance:: array_distance_udf ( ) ,
101+ args,
102+ ) )
103+ . into ( )
104+ }
105+
106+ #[ pyfunction]
107+ fn arrays_zip ( exprs : Vec < PyExpr > ) -> PyExpr {
108+ let exprs = exprs. into_iter ( ) . map ( |x| x. into ( ) ) . collect ( ) ;
109+ datafusion:: functions_nested:: expr_fn:: arrays_zip ( exprs) . into ( )
110+ }
111+
112+ #[ pyfunction]
113+ #[ pyo3( signature = ( string, delimiter, null_string=None ) ) ]
114+ fn string_to_array ( string : PyExpr , delimiter : PyExpr , null_string : Option < PyExpr > ) -> PyExpr {
115+ let mut args = vec ! [ string. into( ) , delimiter. into( ) ] ;
116+ if let Some ( null_string) = null_string {
117+ args. push ( null_string. into ( ) ) ;
118+ }
119+ Expr :: ScalarFunction ( datafusion:: logical_expr:: expr:: ScalarFunction :: new_udf (
120+ datafusion:: functions_nested:: string:: string_to_array_udf ( ) ,
121+ args,
122+ ) )
123+ . into ( )
124+ }
125+
126+ #[ pyfunction]
127+ #[ pyo3( signature = ( start, stop, step=None ) ) ]
128+ fn gen_series ( start : PyExpr , stop : PyExpr , step : Option < PyExpr > ) -> PyExpr {
129+ let mut args = vec ! [ start. into( ) , stop. into( ) ] ;
130+ if let Some ( step) = step {
131+ args. push ( step. into ( ) ) ;
132+ }
133+ Expr :: ScalarFunction ( datafusion:: logical_expr:: expr:: ScalarFunction :: new_udf (
134+ datafusion:: functions_nested:: range:: gen_series_udf ( ) ,
135+ args,
136+ ) )
137+ . into ( )
138+ }
139+
140+ #[ pyfunction]
141+ fn make_map ( keys : Vec < PyExpr > , values : Vec < PyExpr > ) -> PyExpr {
142+ let keys = keys. into_iter ( ) . map ( |x| x. into ( ) ) . collect ( ) ;
143+ let values = values. into_iter ( ) . map ( |x| x. into ( ) ) . collect ( ) ;
144+ datafusion:: functions_nested:: map:: map ( keys, values) . into ( )
145+ }
146+
96147#[ pyfunction]
97148#[ pyo3( signature = ( array, element, index=None ) ) ]
98149fn array_position ( array : PyExpr , element : PyExpr , index : Option < i64 > ) -> PyExpr {
@@ -695,10 +746,20 @@ array_fn!(array_intersect, first_array second_array);
695746array_fn ! ( array_union, array1 array2) ;
696747array_fn ! ( array_except, first_array second_array) ;
697748array_fn ! ( array_resize, array size value) ;
749+ array_fn ! ( array_any_value, array) ;
750+ array_fn ! ( array_max, array) ;
751+ array_fn ! ( array_min, array) ;
752+ array_fn ! ( array_reverse, array) ;
698753array_fn ! ( cardinality, array) ;
699754array_fn ! ( flatten, array) ;
700755array_fn ! ( range, start stop step) ;
701756
757+ // Map Functions
758+ array_fn ! ( map_keys, map) ;
759+ array_fn ! ( map_values, map) ;
760+ array_fn ! ( map_extract, map key) ;
761+ array_fn ! ( map_entries, map) ;
762+
702763aggregate_function ! ( array_agg) ;
703764aggregate_function ! ( max) ;
704765aggregate_function ! ( min) ;
@@ -1165,9 +1226,24 @@ pub(crate) fn init_module(m: &Bound<'_, PyModule>) -> PyResult<()> {
11651226 m. add_wrapped ( wrap_pyfunction ! ( array_replace_all) ) ?;
11661227 m. add_wrapped ( wrap_pyfunction ! ( array_sort) ) ?;
11671228 m. add_wrapped ( wrap_pyfunction ! ( array_slice) ) ?;
1229+ m. add_wrapped ( wrap_pyfunction ! ( array_any_value) ) ?;
1230+ m. add_wrapped ( wrap_pyfunction ! ( array_distance) ) ?;
1231+ m. add_wrapped ( wrap_pyfunction ! ( array_max) ) ?;
1232+ m. add_wrapped ( wrap_pyfunction ! ( array_min) ) ?;
1233+ m. add_wrapped ( wrap_pyfunction ! ( array_reverse) ) ?;
1234+ m. add_wrapped ( wrap_pyfunction ! ( arrays_zip) ) ?;
1235+ m. add_wrapped ( wrap_pyfunction ! ( string_to_array) ) ?;
1236+ m. add_wrapped ( wrap_pyfunction ! ( gen_series) ) ?;
11681237 m. add_wrapped ( wrap_pyfunction ! ( flatten) ) ?;
11691238 m. add_wrapped ( wrap_pyfunction ! ( cardinality) ) ?;
11701239
1240+ // Map Functions
1241+ m. add_wrapped ( wrap_pyfunction ! ( make_map) ) ?;
1242+ m. add_wrapped ( wrap_pyfunction ! ( map_keys) ) ?;
1243+ m. add_wrapped ( wrap_pyfunction ! ( map_values) ) ?;
1244+ m. add_wrapped ( wrap_pyfunction ! ( map_extract) ) ?;
1245+ m. add_wrapped ( wrap_pyfunction ! ( map_entries) ) ?;
1246+
11711247 // Window Functions
11721248 m. add_wrapped ( wrap_pyfunction ! ( lead) ) ?;
11731249 m. add_wrapped ( wrap_pyfunction ! ( lag) ) ?;
0 commit comments