Недавно я встретил что-то странное в SparkНасколько я понимаю, учитывая метод хранения на основе столбцов spark dfs, порядок столбцов действительно не имеет никакого значения, они как ключи в словаре.
Во время df.union (df2) имеет значение порядок столбцов?Я бы предположил, что это не должно, но согласно мудрости форумов sql это делает.
Итак, у нас есть df1
df1
| a| b|
+---+----+
| 1| asd|
| 2|asda|
| 3| f1f|
+---+----+
df2
| b| a|
+----+---+
| asd| 1|
|asda| 2|
| f1f| 3|
+----+---+
result
| a| b|
+----+----+
| 1| asd|
| 2|asda|
| 3| f1f|
| asd| 1|
|asda| 2|
| f1f| 3|
+----+----+
Похоже, что использовалась схема из df1, но данные, по-видимому, соединились в порядке их исходных кадров данных.Очевидно, что решением было бы сделать df1.union (df2.select (df1.columns))
Но главный вопрос в том, почему он это делает?Это просто потому, что он является частью pyspark.sql, или в Spark есть какая-то базовая архитектура данных, которую я понял для понимания?
код для создания набора тестов, если кто-то хочет попробовать
d1={'a':[1,2,3], 'b':['asd','asda','f1f']}
d2={ 'b':['asd','asda','f1f'], 'a':[1,2,3],}
pdf1=pd.DataFrame(d1)
pdf2=pd.DataFrame(d2)
df1=spark.createDataFrame(pdf1)
df2=spark.createDataFrame(pdf2)
test=df1.union(df2)