[ https://issues.apache.org/jira/browse/SPARK-41884?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Sandeep Singh updated SPARK-41884: ---------------------------------- Description: {code:java} import numpy as np import pandas as pd df = self.spark.createDataFrame( [[[("a", 2, 3.0), ("a", 2, 3.0)]], [[("b", 5, 6.0), ("b", 5, 6.0)]]], "array_struct_col Array<struct<col1:string, col2:long, col3:double>>", ) for is_arrow_enabled in [True, False]: with self.sql_conf({"spark.sql.execution.arrow.pyspark.enabled": is_arrow_enabled}): pdf = df.toPandas() self.assertEqual(type(pdf), pd.DataFrame) self.assertEqual(type(pdf["array_struct_col"]), pd.Series) if is_arrow_enabled: self.assertEqual(type(pdf["array_struct_col"][0]), np.ndarray) else: self.assertEqual(type(pdf["array_struct_col"][0]), list){code} {code:java} Traceback (most recent call last): 1415 File "/__w/spark/spark/python/pyspark/sql/tests/test_dataframe.py", line 1202, in test_to_pandas_for_array_of_struct 1416 df = self.spark.createDataFrame( 1417 File "/__w/spark/spark/python/pyspark/sql/connect/session.py", line 264, in createDataFrame 1418 table = pa.Table.from_pylist([dict(zip(_cols, list(item))) for item in _data]) 1419 File "pyarrow/table.pxi", line 3700, in pyarrow.lib.Table.from_pylist 1420 File "pyarrow/table.pxi", line 5221, in pyarrow.lib._from_pylist 1421 File "pyarrow/table.pxi", line 3575, in pyarrow.lib.Table.from_arrays 1422 File "pyarrow/table.pxi", line 1383, in pyarrow.lib._sanitize_arrays 1423 File "pyarrow/table.pxi", line 1364, in pyarrow.lib._schema_from_arrays 1424 File "pyarrow/array.pxi", line 320, in pyarrow.lib.array 1425 File "pyarrow/array.pxi", line 39, in pyarrow.lib._sequence_to_array 1426 File "pyarrow/error.pxi", line 144, in pyarrow.lib.pyarrow_internal_check_status 1427 File "pyarrow/error.pxi", line 123, in pyarrow.lib.check_status 1428pyarrow.lib.ArrowTypeError: Expected bytes, got a 'int' object{code} {code:java} import numpy as np pdf = self._to_pandas() types = pdf.dtypes self.assertEqual(types[0], np.int32) self.assertEqual(types[1], np.object) self.assertEqual(types[2], np.bool) self.assertEqual(types[3], np.float32) self.assertEqual(types[4], np.object) # datetime.date self.assertEqual(types[5], "datetime64[ns]") self.assertEqual(types[6], "datetime64[ns]") self.assertEqual(types[7], "timedelta64[ns]") {code} {code:java} Traceback (most recent call last): 1434 File "/__w/spark/spark/python/pyspark/sql/tests/test_dataframe.py", line 1039, in test_to_pandas 1435 self.assertEqual(types[5], "datetime64[ns]") 1436AssertionError: datetime64[ns, Etc/UTC] != 'datetime64[ns]' 1437 {code} was: {code:java} schema = StructType( [StructField("i", StringType(), True), StructField("j", IntegerType(), True)] ) df = self.spark.createDataFrame([("a", 1)], schema) schema1 = StructType([StructField("j", StringType()), StructField("i", StringType())]) df1 = df.to(schema1) self.assertEqual(schema1, df1.schema) self.assertEqual(df.count(), df1.count()) schema2 = StructType([StructField("j", LongType())]) df2 = df.to(schema2) self.assertEqual(schema2, df2.schema) self.assertEqual(df.count(), df2.count()) schema3 = StructType([StructField("struct", schema1, False)]) df3 = df.select(struct("i", "j").alias("struct")).to(schema3) self.assertEqual(schema3, df3.schema) self.assertEqual(df.count(), df3.count()) # incompatible field nullability schema4 = StructType([StructField("j", LongType(), False)]) self.assertRaisesRegex( AnalysisException, "NULLABLE_COLUMN_OR_FIELD", lambda: df.to(schema4) ){code} {code:java} Traceback (most recent call last): File "/Users/s.singh/personal/spark-oss/python/pyspark/sql/tests/test_dataframe.py", line 1486, in test_to self.assertRaisesRegex( AssertionError: AnalysisException not raised by <lambda> {code} > DataFrame `toPandas` parity in return types > ------------------------------------------- > > Key: SPARK-41884 > URL: https://issues.apache.org/jira/browse/SPARK-41884 > Project: Spark > Issue Type: Sub-task > Components: Connect > Affects Versions: 3.4.0 > Reporter: Sandeep Singh > Priority: Major > > {code:java} > import numpy as np > import pandas as pd > df = self.spark.createDataFrame( > [[[("a", 2, 3.0), ("a", 2, 3.0)]], [[("b", 5, 6.0), ("b", 5, 6.0)]]], > "array_struct_col Array<struct<col1:string, col2:long, col3:double>>", > ) > for is_arrow_enabled in [True, False]: > with self.sql_conf({"spark.sql.execution.arrow.pyspark.enabled": > is_arrow_enabled}): > pdf = df.toPandas() > self.assertEqual(type(pdf), pd.DataFrame) > self.assertEqual(type(pdf["array_struct_col"]), pd.Series) > if is_arrow_enabled: > self.assertEqual(type(pdf["array_struct_col"][0]), np.ndarray) > else: > self.assertEqual(type(pdf["array_struct_col"][0]), list){code} > {code:java} > Traceback (most recent call last): > 1415 File "/__w/spark/spark/python/pyspark/sql/tests/test_dataframe.py", > line 1202, in test_to_pandas_for_array_of_struct > 1416 df = self.spark.createDataFrame( > 1417 File "/__w/spark/spark/python/pyspark/sql/connect/session.py", line > 264, in createDataFrame > 1418 table = pa.Table.from_pylist([dict(zip(_cols, list(item))) for item > in _data]) > 1419 File "pyarrow/table.pxi", line 3700, in pyarrow.lib.Table.from_pylist > 1420 File "pyarrow/table.pxi", line 5221, in pyarrow.lib._from_pylist > 1421 File "pyarrow/table.pxi", line 3575, in pyarrow.lib.Table.from_arrays > 1422 File "pyarrow/table.pxi", line 1383, in pyarrow.lib._sanitize_arrays > 1423 File "pyarrow/table.pxi", line 1364, in pyarrow.lib._schema_from_arrays > 1424 File "pyarrow/array.pxi", line 320, in pyarrow.lib.array > 1425 File "pyarrow/array.pxi", line 39, in pyarrow.lib._sequence_to_array > 1426 File "pyarrow/error.pxi", line 144, in > pyarrow.lib.pyarrow_internal_check_status > 1427 File "pyarrow/error.pxi", line 123, in pyarrow.lib.check_status > 1428pyarrow.lib.ArrowTypeError: Expected bytes, got a 'int' object{code} > > {code:java} > import numpy as np > pdf = self._to_pandas() > types = pdf.dtypes > self.assertEqual(types[0], np.int32) > self.assertEqual(types[1], np.object) > self.assertEqual(types[2], np.bool) > self.assertEqual(types[3], np.float32) > self.assertEqual(types[4], np.object) # datetime.date > self.assertEqual(types[5], "datetime64[ns]") > self.assertEqual(types[6], "datetime64[ns]") > self.assertEqual(types[7], "timedelta64[ns]") {code} > {code:java} > Traceback (most recent call last): 1434 File > "/__w/spark/spark/python/pyspark/sql/tests/test_dataframe.py", line 1039, in > test_to_pandas 1435 self.assertEqual(types[5], "datetime64[ns]") > 1436AssertionError: datetime64[ns, Etc/UTC] != 'datetime64[ns]' 1437 > {code} -- This message was sent by Atlassian Jira (v8.20.10#820010) --------------------------------------------------------------------- To unsubscribe, e-mail: issues-unsubscr...@spark.apache.org For additional commands, e-mail: issues-h...@spark.apache.org