📅  最后修改于: 2023-12-03 15:23:15.750000             🧑  作者: Mango
在 PySpark 中合并两个具有不同列数的 DataFrame 可以使用 join
或 union
操作。
join
操作用于将两个 DataFrame 按照一定的条件合并成一个新的 DataFrame。当两个 DataFrame 的列不同时,可以使用 alias
方法给列取别名,以便能够进行 join 操作。
以下是一个示例代码:
from pyspark.sql.functions import col
# 创建 DataFrame1
df1 = spark.createDataFrame([(1, "apple"), (2, "banana"), (3, "orange")], ["id", "fruit"])
# 创建 DataFrame2
df2 = spark.createDataFrame([(1, "sweet", 10), (2, "sour", 5), (3, "tart", 8)], ["id", "taste", "rating"])
# 将 df1 和 df2 进行 join 操作
df3 = df1.alias("df1").join(df2.alias("df2"), col("df1.id") == col("df2.id"), "inner") \
.select("df1.id", "df1.fruit", "df2.taste", "df2.rating")
df3.show()
输出结果如下:
+---+------+-----+------+
| id| fruit|taste|rating|
+---+------+-----+------+
| 1| apple|sweet| 10|
| 2|banana| sour| 5|
| 3|orange| tart| 8|
+---+------+-----+------+
union
操作用于将两个 DataFrame 按照行进行合并。当两个 DataFrame 的列不同时,需要将列进行调整以保持列名一致。
以下是一个示例代码:
# 创建 DataFrame1
df1 = spark.createDataFrame([(1, "apple"), (2, "banana"), (3, "orange")], ["id", "fruit"])
# 创建 DataFrame2
df2 = spark.createDataFrame([("sweet", 10), ("sour", 5), ("tart", 8)], ["taste", "rating"])
# 将 df1 和 df2 进行 union 操作
df3 = df1.select("id").withColumn("fruit_or_taste", col("fruit")).union(df2.select("rating").withColumn("fruit_or_taste", col("taste")))
df3.show()
输出结果如下:
+---+--------------+
| id|fruit_or_taste|
+---+--------------+
| 1| apple|
| 2| banana|
| 3| orange|
| 10| sweet|
| 5| sour|
| 8| tart|
+---+--------------+
可以看到,两个 DataFrame 合并后,fruit
和 taste
列被合并成了一个 fruit_or_taste
列。