snowpark-connect 0.25.0__py3-none-any.whl → 0.27.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. snowflake/snowpark_connect/config.py +10 -3
  2. snowflake/snowpark_connect/dataframe_container.py +16 -0
  3. snowflake/snowpark_connect/expression/map_expression.py +15 -0
  4. snowflake/snowpark_connect/expression/map_udf.py +68 -27
  5. snowflake/snowpark_connect/expression/map_unresolved_attribute.py +18 -0
  6. snowflake/snowpark_connect/expression/map_unresolved_function.py +38 -28
  7. snowflake/snowpark_connect/includes/jars/json4s-native_2.12-3.7.0-M11.jar +0 -0
  8. snowflake/snowpark_connect/includes/jars/paranamer-2.8.3.jar +0 -0
  9. snowflake/snowpark_connect/includes/jars/sas-scala-udf_2.12-0.1.0.jar +0 -0
  10. snowflake/snowpark_connect/relation/map_extension.py +9 -7
  11. snowflake/snowpark_connect/relation/map_map_partitions.py +36 -72
  12. snowflake/snowpark_connect/relation/map_relation.py +15 -2
  13. snowflake/snowpark_connect/relation/map_row_ops.py +8 -1
  14. snowflake/snowpark_connect/relation/map_show_string.py +2 -0
  15. snowflake/snowpark_connect/relation/map_sql.py +63 -2
  16. snowflake/snowpark_connect/relation/map_udtf.py +96 -44
  17. snowflake/snowpark_connect/relation/utils.py +44 -0
  18. snowflake/snowpark_connect/relation/write/map_write.py +135 -24
  19. snowflake/snowpark_connect/resources_initializer.py +18 -5
  20. snowflake/snowpark_connect/server.py +12 -2
  21. snowflake/snowpark_connect/utils/artifacts.py +4 -5
  22. snowflake/snowpark_connect/utils/concurrent.py +4 -0
  23. snowflake/snowpark_connect/utils/context.py +41 -1
  24. snowflake/snowpark_connect/utils/external_udxf_cache.py +36 -0
  25. snowflake/snowpark_connect/utils/pandas_udtf_utils.py +86 -2
  26. snowflake/snowpark_connect/utils/scala_udf_utils.py +250 -242
  27. snowflake/snowpark_connect/utils/session.py +4 -0
  28. snowflake/snowpark_connect/utils/udf_utils.py +71 -118
  29. snowflake/snowpark_connect/utils/udtf_helper.py +17 -7
  30. snowflake/snowpark_connect/utils/udtf_utils.py +3 -16
  31. snowflake/snowpark_connect/version.py +2 -3
  32. {snowpark_connect-0.25.0.dist-info → snowpark_connect-0.27.0.dist-info}/METADATA +2 -2
  33. {snowpark_connect-0.25.0.dist-info → snowpark_connect-0.27.0.dist-info}/RECORD +41 -37
  34. {snowpark_connect-0.25.0.data → snowpark_connect-0.27.0.data}/scripts/snowpark-connect +0 -0
  35. {snowpark_connect-0.25.0.data → snowpark_connect-0.27.0.data}/scripts/snowpark-session +0 -0
  36. {snowpark_connect-0.25.0.data → snowpark_connect-0.27.0.data}/scripts/snowpark-submit +0 -0
  37. {snowpark_connect-0.25.0.dist-info → snowpark_connect-0.27.0.dist-info}/WHEEL +0 -0
  38. {snowpark_connect-0.25.0.dist-info → snowpark_connect-0.27.0.dist-info}/licenses/LICENSE-binary +0 -0
  39. {snowpark_connect-0.25.0.dist-info → snowpark_connect-0.27.0.dist-info}/licenses/LICENSE.txt +0 -0
  40. {snowpark_connect-0.25.0.dist-info → snowpark_connect-0.27.0.dist-info}/licenses/NOTICE-binary +0 -0
  41. {snowpark_connect-0.25.0.dist-info → snowpark_connect-0.27.0.dist-info}/top_level.txt +0 -0
@@ -6,7 +6,6 @@
6
6
  # So its dependencies are restricted to pandas, snowpark, and, pyspark
7
7
  import functools
8
8
  import inspect
9
- from typing import Iterator
10
9
 
11
10
  import pandas
12
11
  import pyspark.sql.connect.proto.expressions_pb2 as expressions_proto
@@ -70,7 +69,7 @@ class ProcessCommonInlineUserDefinedFunction:
70
69
  self._arguments = common_inline_user_defined_function.arguments
71
70
  self._function_type = common_inline_user_defined_function.WhichOneof("function")
72
71
  self._input_types = input_types
73
- if self._function_type == "scalar_scala_udf" and self._input_types is None:
72
+ if self._function_type == "scalar_scala_udf":
74
73
  # If the Scala UDF is created via `spark.udf.register`, the input types are not automatically inferred.
75
74
  # Pass on the input types from the proto message to the Scala UDF handler.
76
75
  self._scala_input_types = (
@@ -185,6 +184,10 @@ class ProcessCommonInlineUserDefinedFunction:
185
184
  if hasattr(original_callable, "__annotations__"):
186
185
  callable_func.__annotations__ = original_callable.__annotations__
187
186
 
187
+ if self._udf_packages:
188
+ packages = [p.strip() for p in self._udf_packages.strip("[]").split(",")]
189
+ else:
190
+ packages = []
188
191
  if self._udf_imports:
189
192
  imports = [i.strip() for i in self._udf_imports.split(",") if i.strip()]
190
193
  else:
@@ -194,125 +197,75 @@ class ProcessCommonInlineUserDefinedFunction:
194
197
 
195
198
  needs_struct_conversion = isinstance(self._original_return_type, StructType)
196
199
 
197
- additional_packages = None
198
- match self._called_from:
199
- case "map_map_partitions":
200
- column_names = self._input_column_names
201
- eval_type = self._eval_type
200
+ if not needs_struct_conversion:
201
+ return snowpark_fn.udf(
202
+ create_null_safe_wrapper(callable_func),
203
+ return_type=self._return_type,
204
+ input_types=self._input_types,
205
+ name=self._udf_name,
206
+ replace=self._replace,
207
+ packages=packages,
208
+ imports=imports,
209
+ immutable=self._is_deterministic,
210
+ )
202
211
 
203
- def wrapped_function(*args):
204
- result = callable_func(
205
- pandas.DataFrame(iter([list(args)]), columns=column_names)
206
- )
207
- if eval_type == MAP_IN_ARROW_EVAL_TYPE:
208
- if not isinstance(result, Iterator) and not hasattr(
209
- result, "__iter__"
210
- ):
211
- raise RuntimeError(
212
- f"snowpark_connect::UDF_RETURN_TYPE Return type of the user-defined function should be "
213
- f"iterator of pyarrow.RecordBatch, but is {type(result).__name__}"
214
- )
215
- import pyarrow as pa
216
-
217
- for elem in result:
218
- if not isinstance(elem, pa.RecordBatch):
219
- raise RuntimeError(
220
- f"snowpark_connect::UDF_RETURN_TYPE Return type of the user-defined function should "
221
- f"be iterator of pyarrow.RecordBatch, but is iterator of {type(elem).__name__}"
222
- )
223
- return result
224
-
225
- udf_function = create_null_safe_wrapper(wrapped_function)
226
- additional_packages = ["pyarrow", "pandas"]
227
- case _:
228
- if not needs_struct_conversion:
229
- return snowpark_fn.udf(
230
- create_null_safe_wrapper(callable_func),
231
- return_type=self._return_type,
232
- input_types=self._input_types,
233
- name=self._udf_name,
234
- replace=self._replace,
235
- # Packages should already have been added to the session with
236
- # "snowpark.connect.udf.packages".
237
- packages=None,
238
- imports=imports,
239
- immutable=self._is_deterministic,
212
+ is_pandas_udf, _, return_types, _ = extract_return_input_types(
213
+ callable_func,
214
+ self._original_return_type,
215
+ self._input_types,
216
+ TempObjectType.FUNCTION,
217
+ )
218
+ if is_pandas_udf and isinstance(return_types, PandasDataFrameType):
219
+ # Snowpark Python UDFs only support returning a Pandas Series.
220
+ # We change the return type to make the input callable compatible with Snowpark Python UDFs,
221
+ # and then in the wrapper function we convert the pandas DataFrame of the
222
+ # original callable to a Pandas Series.
223
+ original_callable.__annotations__["return"] = pandas.Series
224
+
225
+ field_names = [field.name for field in self._original_return_type.fields]
226
+
227
+ def struct_wrapper(*args):
228
+ result = callable_func(*args)
229
+ if isinstance(result, (tuple, list)):
230
+ # Convert tuple/list to dict using struct field names
231
+ if len(result) == len(field_names):
232
+ return dict(zip(field_names, result))
233
+ return result
234
+
235
+ def pandas_struct_wrapper(*args):
236
+ # inspired by the following snowpark modin code to handle Pandas int/bool/null data in Snowflake VariantType
237
+ # https://github.com/snowflakedb/snowpark-python/blob/e095d5a54f3a697416c3f1df87d239def47a5495/src/snowflake/snowpark/modin/plugin/_internal/apply_utils.py#L1309-L1366
238
+ def convert_to_snowflake_compatible_type(value):
239
+ import numpy as np
240
+ from pandas.api.types import is_scalar
241
+
242
+ if is_scalar(value) and pandas.isna(value):
243
+ return None
244
+
245
+ return (
246
+ int(value)
247
+ if np.issubdtype(type(value), np.integer)
248
+ else (
249
+ bool(value) if np.issubdtype(type(value), np.bool_) else value
240
250
  )
241
-
242
- is_pandas_udf, _, return_types, _ = extract_return_input_types(
243
- callable_func,
244
- self._original_return_type,
245
- self._input_types,
246
- TempObjectType.FUNCTION,
247
251
  )
248
- if is_pandas_udf and isinstance(return_types, PandasDataFrameType):
249
- # Snowpark Python UDFs only support returning a Pandas Series.
250
- # We change the return type to make the input callable compatible with Snowpark Python UDFs,
251
- # and then in the wrapper function we convert the pandas DataFrame of the
252
- # original callable to a Pandas Series.
253
- original_callable.__annotations__["return"] = pandas.Series
254
-
255
- field_names = [
256
- field.name for field in self._original_return_type.fields
257
- ]
258
-
259
- def struct_wrapper(*args):
260
- result = callable_func(*args)
261
- if isinstance(result, (tuple, list)):
262
- # Convert tuple/list to dict using struct field names
263
- if len(result) == len(field_names):
264
- return dict(zip(field_names, result))
265
- return result
266
-
267
- def pandas_struct_wrapper(*args):
268
- # inspired by the following snowpark modin code to handle Pandas int/bool/null data in Snowflake VariantType
269
- # https://github.com/snowflakedb/snowpark-python/blob/e095d5a54f3a697416c3f1df87d239def47a5495/src/snowflake/snowpark/modin/plugin/_internal/apply_utils.py#L1309-L1366
270
- def convert_to_snowflake_compatible_type(value):
271
- import numpy as np
272
- from pandas.api.types import is_scalar
273
-
274
- if is_scalar(value) and pandas.isna(value):
275
- return None
276
-
277
- return (
278
- int(value)
279
- if np.issubdtype(type(value), np.integer)
280
- else (
281
- bool(value)
282
- if np.issubdtype(type(value), np.bool_)
283
- else value
284
- )
285
- )
286
-
287
- result = callable_func(*args)
288
- assert (
289
- len(result) == 1
290
- ), "Expected result to be a single row DataFrame"
291
- # df.applymap doesn't help here, the original type was preserved, hence we convert each value
292
- row_data = [
293
- convert_to_snowflake_compatible_type(value)
294
- for value in result.iloc[0].tolist()
295
- ]
296
- result = pandas.Series([dict(zip(field_names, row_data))])
297
- return result
298
-
299
- if is_pandas_udf:
300
- udf_function = pandas_struct_wrapper
301
- if isinstance(return_types, PandasDataFrameType):
302
- udf_function.__annotations__ = original_callable.__annotations__
303
- else:
304
- udf_function = create_null_safe_wrapper(struct_wrapper)
305
-
306
- packages = None
307
- if additional_packages:
308
- if not self._udf_packages:
309
- packages = additional_packages
310
- else:
311
- existing_packages = [
312
- p.strip() for p in self._udf_packages.strip("[]").split(",")
313
- ]
314
- if not set(additional_packages).issubset(set(existing_packages)):
315
- packages = existing_packages + additional_packages
252
+
253
+ result = callable_func(*args)
254
+ assert len(result) == 1, "Expected result to be a single row DataFrame"
255
+ # df.applymap doesn't help here, the original type was preserved, hence we convert each value
256
+ row_data = [
257
+ convert_to_snowflake_compatible_type(value)
258
+ for value in result.iloc[0].tolist()
259
+ ]
260
+ result = pandas.Series([dict(zip(field_names, row_data))])
261
+ return result
262
+
263
+ if is_pandas_udf:
264
+ udf_function = pandas_struct_wrapper
265
+ if isinstance(return_types, PandasDataFrameType):
266
+ udf_function.__annotations__ = original_callable.__annotations__
267
+ else:
268
+ udf_function = create_null_safe_wrapper(struct_wrapper)
316
269
 
317
270
  return snowpark_fn.udf(
318
271
  udf_function,
@@ -261,15 +261,25 @@ def create(session, b64_str, spark_column_names_json_str, input_schema_json_str,
261
261
  udf_proto = CommonInlineUserDefinedFunction()
262
262
  udf_proto.ParseFromString(restored_bytes)
263
263
 
264
+ if not input_schema_json_str:
265
+ raise ValueError("Input schema is required for pandas UDTF.")
266
+ if not return_schema_json_str:
267
+ raise ValueError("Return schema is required for pandas UDTF.")
268
+
264
269
  spark_column_names = json.loads(spark_column_names_json_str)
265
- input_schema = StructType.fromJson(json.loads(input_schema_json_str)) if input_schema_json_str else None
266
- return_schema = StructType.fromJson(json.loads(return_schema_json_str)) if return_schema_json_str else None
270
+ input_schema = StructType.fromJson(json.loads(input_schema_json_str))
271
+ return_schema = StructType.fromJson(json.loads(return_schema_json_str))
267
272
 
268
- map_in_arrow_udtf = create_pandas_udtf(
269
- udf_proto, spark_column_names,
270
- input_schema, return_schema
271
- )
272
- return map_in_arrow_udtf.name
273
+ map_in_arrow = udf_proto.WhichOneof("function") == "python_udf" and udf_proto.python_udf.eval_type == 207
274
+ if map_in_arrow:
275
+ map_udtf = create_pandas_udtf_with_arrow(
276
+ udf_proto, spark_column_names, input_schema, return_schema
277
+ )
278
+ else:
279
+ map_udtf = create_pandas_udtf(
280
+ udf_proto, spark_column_names, input_schema, return_schema
281
+ )
282
+ return map_udtf.name
273
283
  $$;
274
284
  """
275
285
  session.sql(create_udtf_sproc_sql).collect()
@@ -52,35 +52,22 @@ def create_udtf(
52
52
  if hasattr(callable_func, "terminate"):
53
53
  callable_func.end_partition = callable_func.terminate
54
54
 
55
- def process_packages(packages_str: str) -> (list[str], bool):
55
+ def process_packages(packages_str: str) -> list[str]:
56
56
  packages = []
57
57
  if packages_str and len(packages_str) > 0:
58
58
  packages = [p.strip() for p in packages_str.strip("[]").split(",")]
59
59
 
60
- has_non_session_packages = False
61
-
62
60
  # Include pyarrow in packages when using Arrow-enabled UDTF
63
61
  if is_arrow_enabled and "pyarrow" not in packages:
64
62
  packages += ["pyarrow"]
65
- has_non_session_packages = True
66
63
 
67
64
  if "pyspark" not in packages:
68
65
  # need this to support table argument in UDTF.
69
66
  packages += ["pyspark"]
70
- has_non_session_packages = True
71
-
72
- return (
73
- packages,
74
- has_non_session_packages,
75
- )
76
67
 
77
- packages: str | None
78
- packages, has_non_session_packages = process_packages(packages)
79
- if not has_non_session_packages:
80
- # Skip package validation in the client as all packages were already added to the session
81
- # via "snowpark.connect.udf.packages".
82
- packages = None
68
+ return packages
83
69
 
70
+ packages = process_packages(packages)
84
71
  imports = [i.strip() for i in imports.split(",") if i.strip()]
85
72
  match called_from:
86
73
  case "register_udtf":
@@ -1,6 +1,5 @@
1
- #!/usr/bin/env python3
1
+ # !/usr/bin/env python3
2
2
  #
3
3
  # Copyright (c) 2012-2025 Snowflake Computing Inc. All rights reserved.
4
4
  #
5
-
6
- VERSION = (0, 25, 0)
5
+ VERSION = (0,27,0)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: snowpark-connect
3
- Version: 0.25.0
3
+ Version: 0.27.0
4
4
  Summary: Snowpark Connect for Spark
5
5
  Author: Snowflake, Inc
6
6
  License: Apache License, Version 2.0
@@ -16,7 +16,7 @@ Requires-Dist: jpype1
16
16
  Requires-Dist: protobuf<5.0,>=4.25.3
17
17
  Requires-Dist: s3fs>=2025.3.0
18
18
  Requires-Dist: snowflake.core<2,>=1.0.5
19
- Requires-Dist: snowflake-snowpark-python[pandas]<1.38.0,>=1.37.0
19
+ Requires-Dist: snowflake-snowpark-python[pandas]<1.39.0,==1.38.0
20
20
  Requires-Dist: sqlglot>=26.3.8
21
21
  Requires-Dist: jaydebeapi
22
22
  Requires-Dist: aiobotocore~=2.23.0
@@ -1,20 +1,20 @@
1
1
  snowflake/snowpark_connect/__init__.py,sha256=Sml4x1LTNnxZyw6nnDeJrZWUi3eUAR46Rsw6N-wHUSA,605
2
2
  snowflake/snowpark_connect/column_name_handler.py,sha256=_bTrguwdiF_cqFvoihFU7f42lNqtJ3Af-9fPvSLbf_A,31919
3
- snowflake/snowpark_connect/config.py,sha256=jorSiyJTMARo4ATwUhLuHfCUmycIJN5DZouEXSy8Zlo,24625
3
+ snowflake/snowpark_connect/config.py,sha256=3rdbc05u0IcivwsdUwV4Wg9u6Tf-AhPT2INIinhv1PY,24948
4
4
  snowflake/snowpark_connect/constants.py,sha256=FBDxNUxdqWxnf6d5-eanHlYdFFyQqCqvNyZG-uOiO6Q,598
5
5
  snowflake/snowpark_connect/control_server.py,sha256=mz3huYo84hgqUB6maZxu3LYyGq7vVL1nv7-7-MjuSYY,1956
6
- snowflake/snowpark_connect/dataframe_container.py,sha256=8lZzqrvbM0NJw7SKBbybLzZO3dgIpdh2xrbVuVKyNBE,8468
6
+ snowflake/snowpark_connect/dataframe_container.py,sha256=sCzMxzb6UIJz1mVpwzSYeVBiqtSzZv5n_pn7FVhbRv0,9114
7
7
  snowflake/snowpark_connect/dataframe_name_handler.py,sha256=aR-CpdGsN2d6tNW0H_F9P-FLe5hDU68zJwKjsrgeA2g,1682
8
8
  snowflake/snowpark_connect/date_time_format_mapping.py,sha256=qtQ-JTGR1VRWM2oxM1aYggE_g-BNouffeHxmCk89xkk,16809
9
9
  snowflake/snowpark_connect/empty_dataframe.py,sha256=aKO6JkYnArWCpLGcn9BzvTspw2k_c6eAM0mQImAY0J0,428
10
10
  snowflake/snowpark_connect/hidden_column.py,sha256=k56-e97vqQmoOFtOtIPy6rSu8mZAz-toKHoIBXYW3CU,1322
11
- snowflake/snowpark_connect/resources_initializer.py,sha256=BkD5YdgDNgWVAOYbmlMHrA4feUKL8_vsRD82vOUfQIQ,3992
12
- snowflake/snowpark_connect/server.py,sha256=8ykRayqI7rHlsNPnk8eRRX12Xw3EjvXrvvcDK2XadJs,50672
11
+ snowflake/snowpark_connect/resources_initializer.py,sha256=njE4_L82evaCwFYPGBUX6OEVaHqww42oGXXmzUylt0I,4424
12
+ snowflake/snowpark_connect/server.py,sha256=uYw0pbpWmgfRkrgI5Q5vFsu3Ng-5_H3SR86KkC13S8M,51108
13
13
  snowflake/snowpark_connect/start_server.py,sha256=udegO0rk2FeSnXsIcCIYQW3VRlGDjB_cU8lJ8xSzuM8,942
14
14
  snowflake/snowpark_connect/tcm.py,sha256=ftncZFbVO-uyWMhF1_HYKQykB7KobHEYoyQsYbQj1EM,203
15
15
  snowflake/snowpark_connect/type_mapping.py,sha256=6Hg-h1iVzVB_FnwG3Sjl-UGr2Itrs4LxVb2Pz5Ue-YA,41566
16
16
  snowflake/snowpark_connect/typed_column.py,sha256=Tavii8b4zMj5IWOvN6tlOVmC80W6eQct0pC_tF2nlhU,3867
17
- snowflake/snowpark_connect/version.py,sha256=grgi3WqX6VQex4_8sOqqGPvgHsJVy3jEOKQd55MOJzg,121
17
+ snowflake/snowpark_connect/version.py,sha256=7e7JVBr1dPQ6_J46i0ARFv1O8q5XD9BxRNnNSMkrI0M,118
18
18
  snowflake/snowpark_connect/analyze_plan/__init__.py,sha256=xsIE96jDASko3F-MeNf4T4Gg5ufthS8CejeiJDfri0M,76
19
19
  snowflake/snowpark_connect/analyze_plan/map_tree_string.py,sha256=Q3ZD-Z7uForrF7W3mSAjwaiEcIv2KDXr5jPfVbromVg,1470
20
20
  snowflake/snowpark_connect/error/__init__.py,sha256=oQo6k4zztLmNF1c5IvJLcS99J6RWY9KBTN3RJ2pKimg,249
@@ -30,13 +30,13 @@ snowflake/snowpark_connect/expression/function_defaults.py,sha256=WEnzc_uzZZltcf
30
30
  snowflake/snowpark_connect/expression/hybrid_column_map.py,sha256=2jItaXnFnqcaOIiHKxscFLj7hi2zQE7F3xcher8Zo2U,7614
31
31
  snowflake/snowpark_connect/expression/literal.py,sha256=wk5NnLR85SLHe7GoAvSzMTW0B-3yhAiRz4F5SfU2REs,4459
32
32
  snowflake/snowpark_connect/expression/map_cast.py,sha256=uxNukg9op0i_sKLhY43fJJJ2-SKZ-8wkRMRBiPikJ0c,14799
33
- snowflake/snowpark_connect/expression/map_expression.py,sha256=cotjHDdKiHWbQZx3buBcISCnty8TYyUbbUat4W9qhIk,14119
33
+ snowflake/snowpark_connect/expression/map_expression.py,sha256=Jj8boZ3rSypGM26_g5yL4DJ1z5L_p70_-E5XNriLZN0,14949
34
34
  snowflake/snowpark_connect/expression/map_extension.py,sha256=Qm1Jn3JunswD_hO7ornvKpR6WcM3UKO_JpZE6ovH3VM,4939
35
35
  snowflake/snowpark_connect/expression/map_sql_expression.py,sha256=bHl7_YrKnWy0k1gMz02HYF8lTZKoamQdv5nFCHEfbzI,25824
36
- snowflake/snowpark_connect/expression/map_udf.py,sha256=0Xyt7wdp1kX67hTrAenBLbbydHf_0eaoVEZabLupClg,6483
37
- snowflake/snowpark_connect/expression/map_unresolved_attribute.py,sha256=xIJYxs1EJZNs1skX_xgshvcddsqO8jHgR9QUEvwXm9E,18520
36
+ snowflake/snowpark_connect/expression/map_udf.py,sha256=_om_Kqxm_sm3RhwP4DZbGPUpArX90MoJQm-KwEWrTiQ,8034
37
+ snowflake/snowpark_connect/expression/map_unresolved_attribute.py,sha256=fnkCQF-Ts-Dw93AlwjzQdd9BAR5J4uldML8dZ3J_RMI,19576
38
38
  snowflake/snowpark_connect/expression/map_unresolved_extract_value.py,sha256=A-m-RczZW6xHMjgYR5RV_vzMTpNBRoH3Tk_A1V8z_pk,5382
39
- snowflake/snowpark_connect/expression/map_unresolved_function.py,sha256=0K06ptTLx0rjPnGrEnfHlOmv2ujlle4FfDBZY6sPKEk,476993
39
+ snowflake/snowpark_connect/expression/map_unresolved_function.py,sha256=ZnltrpyzLNn4eu0Eg7axYZVsixt9wTtA0JrAVSh9Ojw,477459
40
40
  snowflake/snowpark_connect/expression/map_unresolved_star.py,sha256=XNJurGS5RLAaIAcalGGBbPJujqg8YZru_RsoB61m0WQ,8865
41
41
  snowflake/snowpark_connect/expression/map_update_fields.py,sha256=bMuZjCOE5wgrZv3ApsoiwEUv-lPgnMWUk-DFX11QuX0,6710
42
42
  snowflake/snowpark_connect/expression/map_window_function.py,sha256=apJxtWSnLogMG0F_En67JoGrGRGYQ0I8O0xPRk4TR_o,12152
@@ -69,13 +69,16 @@ snowflake/snowpark_connect/includes/jars/jackson-module-scala_2.12-2.15.2.jar,sh
69
69
  snowflake/snowpark_connect/includes/jars/json4s-ast_2.12-3.7.0-M11.jar,sha256=-TiMCtSpab8aGGfoXOJO2HyloQlTQrlrNcNW_ZcbVE0,89855
70
70
  snowflake/snowpark_connect/includes/jars/json4s-core_2.12-3.7.0-M11.jar,sha256=L9jmajcVVlKUxO210lFOf_WaFJYMf43YTPCZFmGkihA,526286
71
71
  snowflake/snowpark_connect/includes/jars/json4s-jackson_2.12-3.7.0-M11.jar,sha256=0D7Secg4cLm9YksYF_5ikIItfnQgfR4lCGD73ZNWQ9w,37065
72
+ snowflake/snowpark_connect/includes/jars/json4s-native_2.12-3.7.0-M11.jar,sha256=4D07m64sg9ug-QID5KEGFW8g8gncAyVX5U1gNPC3VFk,92872
72
73
  snowflake/snowpark_connect/includes/jars/json4s-scalap_2.12-3.7.0-M11.jar,sha256=0qH4S2GOHLoSxOjOK6vCPXihLeX1aKv4-67KOcUuDrg,348265
73
74
  snowflake/snowpark_connect/includes/jars/kryo-shaded-4.0.2.jar,sha256=pImfV_70VrnsZvcw57ST7LPcSUzFdYch7ZwYQW_S07Y,410874
74
75
  snowflake/snowpark_connect/includes/jars/log4j-1.2-api-2.20.0.jar,sha256=iddhr4PefgjjwZFrx1ckLO27wfOPt2_RP4nvNrJnGkU,344375
75
76
  snowflake/snowpark_connect/includes/jars/log4j-api-2.20.0.jar,sha256=L0PupnnqZvFMoPE_7CqGAKwST1pSMdy034OT7dy5dVA,313296
76
77
  snowflake/snowpark_connect/includes/jars/log4j-core-2.20.0.jar,sha256=YTffhIza7Z9NUHb3VRPGyF2oC5U_TnrMo4CYt3B2P1U,1847550
77
78
  snowflake/snowpark_connect/includes/jars/log4j-slf4j2-impl-2.20.0.jar,sha256=uN0-TqnP-hjbXzAc2MU5FYZi5pHv1HAaqHtNCZYb2LA,26430
79
+ snowflake/snowpark_connect/includes/jars/paranamer-2.8.3.jar,sha256=qd8Tby6SazeoOKW04iJzQ8OnVdFXJLOoNQtK6ksViUU,37899
78
80
  snowflake/snowpark_connect/includes/jars/paranamer-2.8.jar,sha256=aIyxGKYCHYGROOhVIIyVYDFoi-S0eiS7YVvsxjrO3wc,34654
81
+ snowflake/snowpark_connect/includes/jars/sas-scala-udf_2.12-0.1.0.jar,sha256=cl-jS8dYqWuqawLz8zybq2QTbS9Uuf46k8WEU_Cexdo,3242
79
82
  snowflake/snowpark_connect/includes/jars/scala-collection-compat_2.12-2.7.0.jar,sha256=-2iGSgJIrwl51Fkhhp6xIwtZJqph5cCoc3w_c65YLpI,247466
80
83
  snowflake/snowpark_connect/includes/jars/scala-library-2.12.18.jar,sha256=5R5mNsADNZ4Qa-pK2Z3vcOYTwpAZDIyE8Q-VYN1bAK4,5433857
81
84
  snowflake/snowpark_connect/includes/jars/scala-parser-combinators_2.12-2.3.0.jar,sha256=Fb8T9c4On_QiRgPEQoEmXQUJrDHqgjxGqimlpS4JpXQ,186777
@@ -398,20 +401,20 @@ snowflake/snowpark_connect/relation/map_aggregate.py,sha256=KElVYO62V3jkU8ldTCfT
398
401
  snowflake/snowpark_connect/relation/map_catalog.py,sha256=mcx6An4fqHAxy2OhOC66Xe_0aRtYPDGkBEgMK5CfaXU,5822
399
402
  snowflake/snowpark_connect/relation/map_column_ops.py,sha256=grleA0S6jyia6T5IGbPOEdz0zI0TkkV7jENzlfzoQlQ,49017
400
403
  snowflake/snowpark_connect/relation/map_crosstab.py,sha256=H_J8-IARK6zMEUFrOjKif1St6M20gvBAnP0EuArFHGg,2422
401
- snowflake/snowpark_connect/relation/map_extension.py,sha256=OeaCtrmvRJBfn6TKJ-tb9ynoBs6QybGOsDJqaJMSkjw,22172
404
+ snowflake/snowpark_connect/relation/map_extension.py,sha256=aZUKnOhpVUrgt8-hRbP7JdVfA453vg9YaWaVKQVEsC4,22271
402
405
  snowflake/snowpark_connect/relation/map_join.py,sha256=oINd7AMa_O0bLPqsFFeKnZfE0anKa2RAR9QYh3qdbbY,25042
403
406
  snowflake/snowpark_connect/relation/map_local_relation.py,sha256=VBfwBT75GQUe01UOZptwcYsI7zZxaIMQyTOG6kmVuJ0,15219
404
- snowflake/snowpark_connect/relation/map_map_partitions.py,sha256=AMTz9S2PWjsCDM-Lz_MUTRQ-TUSesdNb-wFa7BUvmB8,5690
405
- snowflake/snowpark_connect/relation/map_relation.py,sha256=iH-VzP6-dwFlTOOYABiMM7xsgrYuQ8BV3UtvjS39w98,11646
406
- snowflake/snowpark_connect/relation/map_row_ops.py,sha256=8RKkbetdD603NONEAgeONXQ6Xbkrs6-CIBV7C86jdLM,30063
407
+ snowflake/snowpark_connect/relation/map_map_partitions.py,sha256=JGiPnqmFFNdHAx54dHyOUwo9JZzyggDd1yLBmu-hasQ,4307
408
+ snowflake/snowpark_connect/relation/map_relation.py,sha256=LaISHm5KrLFb4VSgTT2n-9VL4LB21gaN9xl38qzZmT0,12541
409
+ snowflake/snowpark_connect/relation/map_row_ops.py,sha256=x1Jqircy4I0iiSljx3zbq0YxwGvGzPcXIY8_nhtl2PM,30528
407
410
  snowflake/snowpark_connect/relation/map_sample_by.py,sha256=8ALQbeUsB89sI3uiUFqG3w1A4TtOzOAL4umdKp6-c38,1530
408
- snowflake/snowpark_connect/relation/map_show_string.py,sha256=fuYCuThp7V3VPb5NETJvW0JDf9Xv2qCxdvBmlbHgF7c,3254
409
- snowflake/snowpark_connect/relation/map_sql.py,sha256=UphF9mWLV8csDLNlFTTC0Xq2-OfoHI1ztcyAE5X6d-M,83484
411
+ snowflake/snowpark_connect/relation/map_show_string.py,sha256=GgKg0qp1pGqSC7TuFedTU4IYaIm-Fx23OJ1LfkcGOHw,3382
412
+ snowflake/snowpark_connect/relation/map_sql.py,sha256=BcgZMiyxDzy5cH8in_-O7819b3qGGaDxYNl0C_6Eqec,86496
410
413
  snowflake/snowpark_connect/relation/map_stats.py,sha256=kqRYvix8RfluTKx1cAy9JhBUv6arYQHgfxpP1R4QwBM,13985
411
414
  snowflake/snowpark_connect/relation/map_subquery_alias.py,sha256=rHgE9XUzuWWkjNPtJz3Sxzz2aFo690paHKZh9frqPXk,1456
412
- snowflake/snowpark_connect/relation/map_udtf.py,sha256=2XEq2THfzunP0eBmkLalXYK0XKVfbLKi3hov_CrFP28,11324
415
+ snowflake/snowpark_connect/relation/map_udtf.py,sha256=cfDnbZ3TRJ6eb0EVResu6GL-OwQpaEabWLbrhgWnkRw,13316
413
416
  snowflake/snowpark_connect/relation/stage_locator.py,sha256=c30Z4N_xFavaL5XhIl9sCbhrgn6BLhLbh2xXEaj-QmM,6885
414
- snowflake/snowpark_connect/relation/utils.py,sha256=7Gjhyw0djcF9a5kmi1pQHTdUpW5pKI94VaH7L3OvpU4,6956
417
+ snowflake/snowpark_connect/relation/utils.py,sha256=AhE58g0Zz2DWY9gW4JnB_iBU-r4RMnWCj4okQdHSz_4,8398
415
418
  snowflake/snowpark_connect/relation/catalogs/__init__.py,sha256=0yJ5Nfg7SIxudI0P7_U5EWPyiTpkMet8tSq-IwutSZo,265
416
419
  snowflake/snowpark_connect/relation/catalogs/abstract_spark_catalog.py,sha256=wujeuKotJZRzpPp_WqVB9TkfprFU2tIXTQJk_eFOR0o,9826
417
420
  snowflake/snowpark_connect/relation/catalogs/snowflake_catalog.py,sha256=bsE4XSYd0AjMTAQh8M6NIiOidlCylcQOaIFjGm0EkRw,21802
@@ -430,30 +433,31 @@ snowflake/snowpark_connect/relation/read/reader_config.py,sha256=PMh1R5IjqqTwiAA
430
433
  snowflake/snowpark_connect/relation/read/utils.py,sha256=rIIM6d2WXHh7MLGyHNiRc9tS8b0dmyFQr7rHepIYJOU,4111
431
434
  snowflake/snowpark_connect/relation/write/__init__.py,sha256=xsIE96jDASko3F-MeNf4T4Gg5ufthS8CejeiJDfri0M,76
432
435
  snowflake/snowpark_connect/relation/write/jdbc_write_dbapi.py,sha256=GI9FyGZuQQNV-6Q8Ob-Xr0im3iAPdH-Jkyx8bjwbOuE,11931
433
- snowflake/snowpark_connect/relation/write/map_write.py,sha256=4KjSexJYWHuWRcvLUQOMaD6uH-_I7IiM39ixCi52c9o,34827
436
+ snowflake/snowpark_connect/relation/write/map_write.py,sha256=02e5JkrS6yr8KYGyGehsSfLZLCNDJHUg8tAVkCUAEgk,40376
434
437
  snowflake/snowpark_connect/relation/write/map_write_jdbc.py,sha256=1nOWRgjtZzfRwnSRGFP9V6mqBVlGhSBr2KHGHbe4JMU,1404
435
438
  snowflake/snowpark_connect/resources/java_udfs-1.0-SNAPSHOT.jar,sha256=tVyOp6tXxu9nm6SDufwQiGzfH3pnuh_7PowsMZxOolY,9773
436
439
  snowflake/snowpark_connect/utils/__init__.py,sha256=xsIE96jDASko3F-MeNf4T4Gg5ufthS8CejeiJDfri0M,76
437
- snowflake/snowpark_connect/utils/artifacts.py,sha256=CDSO9ve_yHvT1CKjoLnwiQNarsM5cMUdypGgpRELtK0,2407
440
+ snowflake/snowpark_connect/utils/artifacts.py,sha256=TkHZ2uNfZiphgtG91V1_c_h9yP9dP677BXUMymboCss,2498
438
441
  snowflake/snowpark_connect/utils/cache.py,sha256=bAyoNBW6Z1ui9BuppDywbQeG6fdju4L-owFHzySOTnk,3382
439
- snowflake/snowpark_connect/utils/concurrent.py,sha256=cuPItxiDgqIeZ35881gd3VI1rwQTTu2ldsgw3ZcGqDk,3448
440
- snowflake/snowpark_connect/utils/context.py,sha256=nZVj1EMH-aP32cKFCcHqDut3lPtdt0A8DniBzMxCS4k,12132
442
+ snowflake/snowpark_connect/utils/concurrent.py,sha256=2UrQfJPWFrtpx131514t-9aXFDphbGI3N2pumLrltNk,3543
443
+ snowflake/snowpark_connect/utils/context.py,sha256=W9j9eC-lbGp7tfXWhnvI88CVOcLGspYEhEgxGPYVbYE,13288
441
444
  snowflake/snowpark_connect/utils/describe_query_cache.py,sha256=2VcPgGP9bUpdIhnN2s_MOG8oGHKX0hS0rT7Y26MJb3A,9001
442
445
  snowflake/snowpark_connect/utils/env_utils.py,sha256=g__Uio5ae20Tm1evahIHdJUXQYPmjNUT_kYPSIy5JDU,1488
446
+ snowflake/snowpark_connect/utils/external_udxf_cache.py,sha256=eSZHMbjTxnkg78IlbG5P1Vno6j5ag_FSI0c4Xi2UyPs,1044
443
447
  snowflake/snowpark_connect/utils/identifiers.py,sha256=YgtVIQGuUnnTiNdtRficdBwUICWaWkJltjOPnTnfrak,3881
444
448
  snowflake/snowpark_connect/utils/interrupt.py,sha256=_awhdrzF1KQO-EQThneEcfMg3Zxed4p3HtMpkcAb6ek,2790
445
449
  snowflake/snowpark_connect/utils/io_utils.py,sha256=noBlKpJvzEA6iwLjFgBVGlCLlzjZ16-w0fsGimTyBAQ,1039
446
- snowflake/snowpark_connect/utils/pandas_udtf_utils.py,sha256=QwdLGLg5bX0JJTrWKfL4Ou4MIp443cryEbrZNBrulNE,4207
450
+ snowflake/snowpark_connect/utils/pandas_udtf_utils.py,sha256=3WA_9IVRZL8fnwIHo048LTg62-bPGfCDUZzYd-zjzQQ,7564
447
451
  snowflake/snowpark_connect/utils/profiling.py,sha256=ttdHzQUYarvTqJASLNuKFIax7ejO39Tv1mHKl0QjRkg,1519
448
- snowflake/snowpark_connect/utils/scala_udf_utils.py,sha256=hbyvFw4FfBpIntiQZnszvKbEtaKh3w-4wtaCh4CF_uA,20087
449
- snowflake/snowpark_connect/utils/session.py,sha256=iVodOTUAE5tGOZN9JYt2cgsgFcvwqEAdApsSrvZyCYk,7633
452
+ snowflake/snowpark_connect/utils/scala_udf_utils.py,sha256=YDHmhqsjgBeuKdv1TaInEUUOvrnbrU3_toQY_MfEygk,22895
453
+ snowflake/snowpark_connect/utils/session.py,sha256=dxt5VoqsQqBZd3OaEpoPfA0U-uNFWDP-HWtrcoey7_w,7770
450
454
  snowflake/snowpark_connect/utils/snowpark_connect_logging.py,sha256=23bvbALGqixJ3Ap9QWM3OpcKNK-sog2mr9liSmvwqYU,1123
451
455
  snowflake/snowpark_connect/utils/telemetry.py,sha256=BRDX1eRXcww2SAiBlVr2fQVR2I6gH50qSCFkOop_x4M,20736
452
456
  snowflake/snowpark_connect/utils/udf_cache.py,sha256=8K7kASEhvpnp-l1hjzovjyboUzKctDq7PiGXRcNv6Lg,12125
453
457
  snowflake/snowpark_connect/utils/udf_helper.py,sha256=g-TxTs4ARyJWYgADrosfQQG-ykBBQdm1g5opslxJq_E,12563
454
- snowflake/snowpark_connect/utils/udf_utils.py,sha256=CNs40eR2NitagvrMQdWgTaoWnnX_srLUKMMpEWeTT_M,14723
455
- snowflake/snowpark_connect/utils/udtf_helper.py,sha256=nTWbrFMc4hHLkalT4nJIsC_c00T6GFkB55JHOw1D-wg,14571
456
- snowflake/snowpark_connect/utils/udtf_utils.py,sha256=lqfsxN4596qro8PVSVUjf9-qIs1dgY-5tuOSVBSoAR4,33569
458
+ snowflake/snowpark_connect/utils/udf_utils.py,sha256=pxERcJKum2M5jHxPqsl1NgHFAqZV4RxoEnSLxJV5ups,12009
459
+ snowflake/snowpark_connect/utils/udtf_helper.py,sha256=9B_1iOckfFXQfVv-UHerIJ32fDd4qucKaHGqxtBEi4w,14969
460
+ snowflake/snowpark_connect/utils/udtf_utils.py,sha256=wHO5V0BXRQOLqAYos1vGt8bbdH7jBvD2gwspWywjTtY,33110
457
461
  snowflake/snowpark_connect/utils/udxf_import_utils.py,sha256=pPtcaGsyh0tUdy0aAvNqTj04jqPKlEcGmvaZDP9O8Gc,536
458
462
  snowflake/snowpark_connect/utils/xxhash64.py,sha256=ysJRxhBPf25LeNhM1RK_H36MWl6q6C6vBRHa-jIna_A,7477
459
463
  snowflake/snowpark_decoder/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -461,17 +465,17 @@ snowflake/snowpark_decoder/dp_session.py,sha256=HIr3TfKgYl5zqaGR5xpFU9ZVkcaTB9I8
461
465
  snowflake/snowpark_decoder/spark_decoder.py,sha256=EQiCvBiqB736Bc17o3gnYGtcYVcyfGxroO5e1kbe1Co,2885
462
466
  snowflake/snowpark_decoder/_internal/proto/generated/DataframeProcessorMsg_pb2.py,sha256=2eSDqeyfMvmIJ6_rF663DrEe1dg_anrP4OpVJNTJHaQ,2598
463
467
  snowflake/snowpark_decoder/_internal/proto/generated/DataframeProcessorMsg_pb2.pyi,sha256=aIH23k52bXdw5vO3RtM5UcOjDPaWsJFx1SRUSk3qOK8,6142
464
- snowpark_connect-0.25.0.data/scripts/snowpark-connect,sha256=yZ94KqbWACxnwV8mpg8NjILvvRNjnF8B3cs3ZFNuIM4,1546
465
- snowpark_connect-0.25.0.data/scripts/snowpark-session,sha256=NMAHSonTo-nmOZSkQNlszUC0jLJ8QWEDUsUmMe2UAOw,190
466
- snowpark_connect-0.25.0.data/scripts/snowpark-submit,sha256=Zd98H9W_d0dIqMSkQLdHyW5G3myxF0t4c3vNBt2nD6A,12056
467
- snowpark_connect-0.25.0.dist-info/licenses/LICENSE-binary,sha256=fmBlX39HwTlBUyiKEznaLZGuxQy-7ndLLG_rTXjF02Y,22916
468
- snowpark_connect-0.25.0.dist-info/licenses/LICENSE.txt,sha256=Ff9cPv4xu0z7bnMTHzo4vDncOShsy33w4oJMA2xjn6c,11365
469
- snowpark_connect-0.25.0.dist-info/licenses/NOTICE-binary,sha256=elMF8brgGNJwOz8YdorzBF6-U8ZhR8F-77FfGkZng7U,57843
468
+ snowpark_connect-0.27.0.data/scripts/snowpark-connect,sha256=yZ94KqbWACxnwV8mpg8NjILvvRNjnF8B3cs3ZFNuIM4,1546
469
+ snowpark_connect-0.27.0.data/scripts/snowpark-session,sha256=NMAHSonTo-nmOZSkQNlszUC0jLJ8QWEDUsUmMe2UAOw,190
470
+ snowpark_connect-0.27.0.data/scripts/snowpark-submit,sha256=Zd98H9W_d0dIqMSkQLdHyW5G3myxF0t4c3vNBt2nD6A,12056
471
+ snowpark_connect-0.27.0.dist-info/licenses/LICENSE-binary,sha256=fmBlX39HwTlBUyiKEznaLZGuxQy-7ndLLG_rTXjF02Y,22916
472
+ snowpark_connect-0.27.0.dist-info/licenses/LICENSE.txt,sha256=Ff9cPv4xu0z7bnMTHzo4vDncOShsy33w4oJMA2xjn6c,11365
473
+ snowpark_connect-0.27.0.dist-info/licenses/NOTICE-binary,sha256=elMF8brgGNJwOz8YdorzBF6-U8ZhR8F-77FfGkZng7U,57843
470
474
  spark/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
471
475
  spark/connect/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
472
476
  spark/connect/envelope_pb2.py,sha256=7Gc6OUA3vaCuTCIKamb_Iiw7W9jPTcWNEv1im20eWHM,2726
473
477
  spark/connect/envelope_pb2.pyi,sha256=VXTJSPpcxzB_dWqVdvPY4KkPhJfh0WmkX7SNHWoLhx0,3358
474
- snowpark_connect-0.25.0.dist-info/METADATA,sha256=jus5PaXMlwZIJ6lZ-VYsSi_LFR9HKT6utHUhInqE0KA,1594
475
- snowpark_connect-0.25.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
476
- snowpark_connect-0.25.0.dist-info/top_level.txt,sha256=ExnWqVpoTHRG99fu_AxXZVOz8c-De7nNu0yFCGylM8I,16
477
- snowpark_connect-0.25.0.dist-info/RECORD,,
478
+ snowpark_connect-0.27.0.dist-info/METADATA,sha256=w6hmGXXIiI6a74FuRcX7WiRBQP2ZlTVA_oqU1Lp8P0k,1594
479
+ snowpark_connect-0.27.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
480
+ snowpark_connect-0.27.0.dist-info/top_level.txt,sha256=ExnWqVpoTHRG99fu_AxXZVOz8c-De7nNu0yFCGylM8I,16
481
+ snowpark_connect-0.27.0.dist-info/RECORD,,