Skip to content

Commit 2746634

Browse files
authored
SNOW-0000000: Revert pyarrow 13.0.0 dependency. (#1935)
1 parent eca86b9 commit 2746634

File tree

3 files changed

+22
-8
lines changed

3 files changed

+22
-8
lines changed

setup.cfg

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,6 @@ development =
9494
pytzdata
9595
pandas =
9696
pandas>=1.0.0,<3.0.0
97-
pyarrow>=13.0.0
97+
pyarrow
9898
secure-local-storage =
9999
keyring>=23.1.0,<25.0.0

src/snowflake/connector/result_batch.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -703,10 +703,7 @@ def to_pandas(
703703
"""Returns this batch as a pandas DataFrame"""
704704
self._check_can_use_pandas()
705705
table = self.to_arrow(connection=connection)
706-
# By default arrow returns maps as kv tuples in order to allow duplicate keys.
707-
# Snowflake does not support duplicate keys in maps. In order to better match
708-
# pyspark this will return maps as dictionaries which would remove duplicate keys.
709-
return table.to_pandas(**{"maps_as_pydicts": "strict", **kwargs})
706+
return table.to_pandas(**kwargs)
710707

711708
def _get_pandas_iter(
712709
self, connection: SnowflakeConnection | None = None, **kwargs

test/integ/test_arrow_result.py

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -248,10 +248,16 @@ def pandas_verify(cur, data, deserialize):
248248
value = json.loads(value)
249249
if isinstance(value, numpy.ndarray):
250250
value = value.tolist()
251+
251252
# Numpy nans have to be checked with isnan. nan != nan according to numpy
252253
if isinstance(value, float) and numpy.isnan(value):
253254
assert datum is None or numpy.isnan(datum), "nan values should return nan."
254255
else:
256+
if isinstance(value, dict):
257+
value = {
258+
k: v.tolist() if isinstance(v, numpy.ndarray) else v
259+
for k, v in value.items()
260+
}
255261
assert (
256262
value == datum or value is datum
257263
), f"Result value {value} should match input example {datum}."
@@ -340,11 +346,14 @@ def test_map(key_type, datatype, examples, iceberg, pandas, conn_cnx):
340346

341347
if datatype == "VARIANT":
342348
data = {k: dumps(v) if v else v for k, v in data.items()}
349+
if pandas:
350+
data = list(data.items())
343351
elif pandas:
344352
examples = PANDAS_STRUCTURED_REPRS.get(datatype, examples)
345-
data = {
346-
str(i) if key_type == "varchar" else i: ex for i, ex in enumerate(examples)
347-
}
353+
data = [
354+
(str(i) if key_type == "varchar" else i, ex)
355+
for i, ex in enumerate(examples)
356+
]
348357

349358
query = f"""
350359
SELECT
@@ -431,6 +440,14 @@ def test_nested_types(conn_cnx, iceberg, pandas):
431440
SELECT
432441
parse_json('{json_string}') :: object(child array(map (varchar, object(struct_field varchar)))) as col
433442
"""
443+
if pandas:
444+
data = {
445+
"child": [
446+
[
447+
("key1", {"struct_field": "value"}),
448+
]
449+
]
450+
}
434451
verify_datatypes(
435452
conn_cnx,
436453
query,

0 commit comments

Comments
 (0)