我想连接两个PySpark数据框。但是,我想连接一个数据框中的所有列,以及第二个数据框中的一些列。问题是,两个数据框中有一个名称相似的列。
示例数据框:
# Prepare Data
data_1 = [
(1, "Italy", "Europe"),
(2, "Italy", "Europe"),
(3, "Germany", None),
(4, "Iran", "Asia"),
(5, "China", "Asia"),
(6, "China", None),
(7, "Japan", "Asia"),
(8, "France", None),
]
# Create DataFrame
columns = ["Code", "Country", "Continent"]
df_1 = spark.createDataFrame(data=data_1, schema=columns)
df_1.show(truncate=False)
# Prepare Data
data_2 = [
(1, "Italy", "EUR", 11),
(2, "Germany", "EUR", 12),
(3, "China", "CNY", 13),
(4, "Japan", "JPY", 14),
(5, "France", "EUR", 15),
(6, "Taiwan", "TWD", 16),
(7, "USA", "USD", 17),
(8, "India", "INR", 18),
]
# Create DataFrame
columns = ["Code", "Country", "Currency", "Sales"]
df_2 = spark.createDataFrame(data=data_2, schema=columns)
df_2.show(truncate=False)
我需要第一个数据框的所有列和第二个数据框的唯一列"货币"。当我使用左联接时:
output = df_1.join(df_2, ["Country"], "left")
output.show()
现在,在Join操作之后,有两个名为"Code"的列。
使用拖放列:
output = df_1.join(df_2, ["Country"], "left").drop('Code', 'Sales')
output.show()
两个名为"Code"的列都被删除。但是,我想保留第一个数据框中的"Code"列。
你知道怎么解决这个问题吗?
另一个问题是如何使"Code"列成为Join操作后生成的DataFrame中最左边的列。
1条答案
按热度按时间gcuhipw91#
如果不需要
df_2
中的列,可以在连接之前删除它们,如下所示:注意,你也可以通过指定它们来自的 Dataframe 来消除两个同名列的歧义,例如
df_1['Code']
,所以在你的例子中,在连接之后,你可以使用drop
,而不是只保留来自df_1
的列和Currency
列: