我正在连接2个数据帧并选择左帧的所有列,例如:
val join_df = first_df.join(second_df, first_df("id") === second_df("id") , "left_outer")
在上面我想做select first_df。*。如何在连接中选择一帧的所有列?
答案 0 :(得分:15)
使用别名:
first_df.alias("fst").join(second_df, Seq("id"), "left_outer").select("fst.*")
答案 1 :(得分:3)
假设你:
然后,您可以执行以下操作:
val selectColumns = df1.columns.map(df1(_)) ++ Array(df2("field1"), df2("field2"))
df1.join(df2, df1("key") === df2("key")).select(selectColumns:_*)
答案 2 :(得分:1)
我们也可以使用leftsemi join。 leftsemi join将从连接的数据帧中选择左侧数据帧中的数据。
这里我们根据列col1连接两个数据帧df1和df2。
df1.join(df2, df1.col("col1").equalTo(df2.col("col1")), "leftsemi")
答案 3 :(得分:0)
只是添加一种可能性,无需使用别名,我就可以在 pyspark 中使用
first_df.join(second_df, "id", "left_outer").select( first_df["*"] )
不确定是否适用于此,但希望它有所帮助