gpt4 book ai didi

apache-spark - Spark联合列顺序

转载 作者:行者123 更新时间:2023-12-04 22:54:29 25 4
gpt4 key购买 nike

我最近在 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)

最佳答案

在 spark Union 中没有对列的元数据进行处理,并且数据也不会像您想象的那样乱序。相反,联合是在列号上完成的,如果您要联合 2 个 Df,则两者必须具有相同的列数..在进行联合之前,您必须考虑列的位置。与 SQL 或 Oracle 或其他 RDBMS 不同,spark 中的底层文件是物理文件。希望这能回答你的问题

关于apache-spark - Spark联合列顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56942058/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com