如何在join中选择数据框的所有列 - Spark-scala

时间:2016-06-13 01:32:23

标签: scala hadoop apache-spark

我正在连接2​​个数据帧并选择左帧的所有列,例如:

val join_df = first_df.join(second_df, first_df("id") === second_df("id") , "left_outer")

在上面我想做select first_df。*。如何在连接中选择一帧的所有列?

4 个答案:

答案 0 :(得分:15)

使用别名:

first_df.alias("fst").join(second_df, Seq("id"), "left_outer").select("fst.*")

答案 1 :(得分:3)

假设你:

  1. 想要使用DataFrame语法。
  2. 想要从df1中选择所有列,但只能从df2中选择一对。
  3. 由于df1中的列数,显式列出很麻烦。
  4. 然后,您可以执行以下操作:

    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["*"] )

不确定是否适用于此,但希望它有所帮助