我有以下两个 PySpark 数据框:
df1:
第1栏 | 第2栏 | 第3栏 | 第4栏 |
---|---|---|---|
有一定价值 | 有一定价值 | 有一定价值 | 一些价值1 |
df2:
第1栏 | 第2栏 | 第3栏 | 第5栏 |
---|---|---|---|
有一定价值 | 有一定价值 | 有一定价值 | 一些价值2 |
当我尝试在
column1
、column2
和 column3
上对它们执行外连接时,我得到:
第1栏 | 第2栏 | 第3栏 | 第4栏 | 第5栏 |
---|---|---|---|---|
有一定价值 | 有一定价值 | 有一定价值 | 空 | 一些价值2 |
有一定价值 | 有一定价值 | 有一定价值 | 一些价值1 | 空 |
但我想要以下输出:
第1栏 | 第2栏 | 第3栏 | 第4栏 | 第5栏 |
---|---|---|---|---|
有一定的价值 | 有一定的价值 | 有一定价值 | 一些价值1 | 一些价值2 |
我该怎么做?
您正在寻找的是
left
而不是 full_outer
加入。
以下代码应该可以达到您的预期结果。
from pyspark.sql import Row
from pyspark.sql import functions as f
from pyspark.sql.types import StructType, StructField, StringType
data_df1 = [
Row(
column1="some value",
column2="some value",
column3="some value",
column4="some value1"
),
]
schema_df1 = StructType([
StructField(name="column1", dataType=StringType(), nullable=True),
StructField(name="column2", dataType=StringType(), nullable=True),
StructField(name="column3", dataType=StringType(), nullable=True),
StructField(name="column4", dataType=StringType(), nullable=True),
])
data_df2 = [
Row(
column1="some value",
column2="some value",
column3="some value",
column5="some value2"
),
]
schema_df2 = StructType([
StructField(name="column1", dataType=StringType(), nullable=True),
StructField(name="column2", dataType=StringType(), nullable=True),
StructField(name="column3", dataType=StringType(), nullable=True),
StructField(name="column5", dataType=StringType(), nullable=True),
])
df1 = spark.createDataFrame(data=data_df1, schema=schema_df1)
df2 = spark.createDataFrame(data=data_df2, schema=schema_df2)
df_res = df1.join(df2, on=["column1", "column2", "column3"], how="left")
df_res.show()
+----------+----------+----------+-----------+-----------+
| column1| column2| column3| column4| column5|
+----------+----------+----------+-----------+-----------+
|some value|some value|some value|some value1|some value2|
+----------+----------+----------+-----------+-----------+
由于您还没有共享您的代码 - 所以不确定您做错了什么 - 因为我通过以下代码获得了您想要的输出:
joined_df = df1.join(df2, ["column1", "column2", "column3"], how="outer")
joined_df.show()
输出:
+----------+----------+----------+-----------+-----------+
| column1| column2| column3| column4| column5|
+----------+----------+----------+-----------+-----------+
|some value|some value|some value|some value1|some value2|
+----------+----------+----------+-----------+-----------+