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: _*)
我有 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: _*)