У меня есть обстоятельства, когда мне нужно собирать значения столбцов как Set () в искровом фрейме данных, чтобы найти разницу с другим набором. У меня есть следующие 2 кадра данных
DF1
+----+---------+----------+----+-----------------+
|Lily|Sunflower|Windflower|Rose|Snapdragon Flower|
+----+---------+----------+----+-----------------+
|1 |2 |3 |4 |5 |
+----+---------+----------+----+-----------------+
DF2
+-----------------+
|Flowers |
+-----------------+
|Rose |
|Lily |
|Tulip |
|Orchid |
|Snapdragon Flower|
+-----------------+
Я хочу найти установленную разницу между именами столбцов DF1 и значениями столбца Flower из DF2. Для этого я написал следующий код, но создаю пустое значение в их установленной разнице. КОД:
import sparkSession.sqlContext.implicits._
val df1 = Seq(("1", "2", "3", "4", "5")).toDF("Lily", "Sunflower", "Windflower", "Rose", "Snapdragon Flower")
val df2 = Seq("Rose", "Lily", "Tulip", "Orchid", "Snapdragon Flower").toDF("Flowers")
val set1 = df1.columns.toSet
println(s"set1 => ${set1}")
val flower_values = df2.select("Flowers").collectAsList()
var set2 = Set("") //introduce empty String Type column
for (i <- 0 until flower_values.size()) {
var col = flower_values.get(i).toString()
set2 += col.substring(1, col.size - 1)
}
println(s"set2 => ${set2}")
val dif_btw_set2_and_set1 = set2.diff(set1)
println(s"dif_btw_set2_and_set1 => ${dif_btw_set2_and_set1}")
ВЫХОД:
set1 => Set(Sunflower, Rose, Windflower, Snapdragon Flower, Lily)
set2 => Set(, Orchid, Rose, Snapdragon Flower, Tulip, Lily)
dif_btw_set2_and_set1 => Set(, Orchid, Tulip)
Можно ли сделать это более элегантно в Scala -Spark?