我有 2 個資料框,第一個有 53 列,第二個有 132 列。我想比較這兩個資料框并洗掉這兩個資料框之間不共有的所有列,然后顯示每個資料框只包含那些常見的列。
到目前為止,我所做的是獲取所有不匹配的列的串列,但我不知道如何洗掉它們。
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)
uj5u.com熱心網友回復:
該.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: _*)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/467640.html
上一篇:如何在箭頭函式中添加if陳述句
