@@ -50,7 +50,7 @@ class FlattenResult:
5050 nested_columns : set [str ]
5151
5252
53- @dataclasses .dataclass ( frozen = True )
53+ @dataclasses .dataclass
5454class ColumnClassification :
5555 """The result of classifying columns.
5656
@@ -107,40 +107,41 @@ def flatten_nested_data(
107107 result_df = dataframe .copy ()
108108
109109 classification = _classify_columns (result_df )
110- # Extract lists to allow modification by subsequent steps.
111- # _flatten_array_of_struct_columns will modify array_columns to replace
112- # the original array-of-struct column with the new flattened array columns.
113- struct_columns = classification .struct_columns
114- array_columns = classification .array_columns
115- array_of_struct_columns = classification .array_of_struct_columns
116- clear_on_continuation_cols = classification .clear_on_continuation_cols
117- nested_originated_columns = classification .nested_originated_columns
118-
119- result_df , array_columns = _flatten_array_of_struct_columns (
120- result_df , array_of_struct_columns , array_columns , nested_originated_columns
110+ # Create a mutable structure to track column changes during flattening.
111+ # _flatten_array_of_struct_columns modifies the array_columns list.
112+ columns_info = dataclasses .replace (classification )
113+
114+ result_df , columns_info .array_columns = _flatten_array_of_struct_columns (
115+ result_df ,
116+ columns_info .array_of_struct_columns ,
117+ columns_info .array_columns ,
118+ columns_info .nested_originated_columns ,
121119 )
122120
123- result_df , clear_on_continuation_cols = _flatten_struct_columns (
124- result_df , struct_columns , clear_on_continuation_cols , nested_originated_columns
121+ result_df , columns_info .clear_on_continuation_cols = _flatten_struct_columns (
122+ result_df ,
123+ columns_info .struct_columns ,
124+ columns_info .clear_on_continuation_cols ,
125+ columns_info .nested_originated_columns ,
125126 )
126127
127128 # Now handle ARRAY columns (including the newly created ones from ARRAY of STRUCT)
128- if not array_columns :
129+ if not columns_info . array_columns :
129130 return FlattenResult (
130131 dataframe = result_df ,
131132 row_labels = None ,
132133 continuation_rows = None ,
133- cleared_on_continuation = clear_on_continuation_cols ,
134- nested_columns = nested_originated_columns ,
134+ cleared_on_continuation = columns_info . clear_on_continuation_cols ,
135+ nested_columns = columns_info . nested_originated_columns ,
135136 )
136137
137- explode_result = _explode_array_columns (result_df , array_columns )
138+ explode_result = _explode_array_columns (result_df , columns_info . array_columns )
138139 return FlattenResult (
139140 dataframe = explode_result .dataframe ,
140141 row_labels = explode_result .row_labels ,
141142 continuation_rows = explode_result .continuation_rows ,
142- cleared_on_continuation = clear_on_continuation_cols ,
143- nested_columns = nested_originated_columns ,
143+ cleared_on_continuation = columns_info . clear_on_continuation_cols ,
144+ nested_columns = columns_info . nested_originated_columns ,
144145 )
145146
146147
0 commit comments