【发布时间】:2019-11-18 09:21:44
【问题描述】:
我最近在 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)
【问题讨论】:
标签: apache-spark pyspark apache-spark-sql pyspark-sql