📜  在 PySpark 中合并两个具有不同列数的 DataFrame(1)

📅  最后修改于: 2023-12-03 15:23:15.750000             🧑  作者: Mango

在 PySpark 中合并两个具有不同列数的 DataFrame

在 PySpark 中合并两个具有不同列数的 DataFrame 可以使用 joinunion 操作。

使用 join 操作合并 DataFrame

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

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 合并后,fruittaste 列被合并成了一个 fruit_or_taste 列。