在spark中连接2个Dataframe时从Dataframe中删除所有列

axzmvihb  于 2021-05-27  发布在  Spark
关注(0)|答案(3)|浏览(530)

我将连接两个Dataframe并使用 withColumn 方法中,我需要第一个Dataframe中的所有列和我使用 withcolumn 方法我想从第二个Dataframe中删除所有列是否有任何方法可以从第二个Dataframe中删除所有列当前我对每一列都使用单独的删除方法。

val df3 = df1.join(df2, df1("id") === df2("id"))
        .drop(df2("name"))
        .drop(df2("lastname"))

是否有任何方法可以使用单个方法删除所有列,而不是单独删除。

uqcuzwp8

uqcuzwp81#

问题是 drop 只接受一个类型的值 Column &类型的多值 String .
如果传递多个类型的值 String 两个加入dfs中可能有相同的列,您可能会丢失与该列相关的数据。
而不是删除列,只选择如下所示的必需列。

val columns = df1.columns.map(c => df1(c)).toList ::: List(col("with_column_a"),col("with_column_b"))

val df3 = df1.join(df2, df1("id") === df2("id")).select(columns:_*)

val df3 = df1.join(df2, df1("id") === df2("id"))
df2.columns.map(column => df2(column)).foldLeft(df3)((ddf,column) => ddf.drop(column))
f3temu5u

f3temu5u2#

当您有多个列要 drop 通过使用 .select ```
val df3 = df1.join(df2, df1("id") === df2("id"))
.select("Select all the columns you need")

这样,如果删除了所需的列,就不需要考虑太多,因为两个Dataframe中可能都有不明确的列。
你也可以用 `.selectExpr()` 使用 `as` 选择列时
z4bn682m

z4bn682m3#

它可以做如下,请找到代码测试的内联注解

val df2ColumnList = df2.columns    // Get the list of df2 columns
val df3 = df1.join(df2, df1("id") === df2("id"))
             .drop(df2ColumnList : _*)  // You can pass the list to drop function

相关问题