Spark scala 如何删除两个数据帧之间不常见的列

Spark scala how to remove the columns that are not in common between 2 dataframes

我有 2 个数据框,第一个有 53 列,第二个有 132 列。 我想比较 2 个数据帧并删除 2 个数据帧之间不常见的所有列,然后显示仅包含那些常见列的每个数据帧。

到目前为止我所做的是获取所有不匹配列的列表,但我不知道如何删除它们。

    val diffColumns = df2.columns.toSet.diff(df1.columns.toSet).union(df1.columns.toSet.diff(df2.columns.toSet))

这让我得到一个 scala.collection.immutable.Set[String]。 现在我想用它从每个数据框中删除这些列。类似的东西,但这不起作用...

    val newDF1 = df1.drop(diffColumns)

.drop 函数接受列列表,而不是 Set 对象,因此您需要将其转换为 Seq 并使用 : _* 语法“扩展它”,像这样:

df.drop(diffColumns.columns.toSet.toSeq: _*)

此外,与其生成差异,不如通过相交来查找公共列,并在每个数据帧上使用 .select 以获得相同的列:

val df = spark.range(10).withColumn("b", rand())
val df2 = spark.range(10).withColumn("c", rand())
val commonCols = df.columns.toSet.intersect(df2.columns.toSet).toSeq.map(col)
df.select(commonCols: _*)
df2.select(commonCols: _*)