scala - 收集要设置的 Spark 数据框列值
问题描述
在某些情况下,我需要在 spark 数据框中收集列值作为 Set(),以找出与其他集合的差异。我有以下2个数据框
DF1
+----+---------+----------+----+-----------------+
|Lily|Sunflower|Windflower|Rose|Snapdragon Flower|
+----+---------+----------+----+-----------------+
|1 |2 |3 |4 |5 |
+----+---------+----------+----+-----------------+
DF2
+-----------------+
|Flowers |
+-----------------+
|Rose |
|Lily |
|Tulip |
|Orchid |
|Snapdragon Flower|
+-----------------+
我想找到 DF1 的列名与 DF2 的 Flower 列的值之间的设置差异。为此,我编写了以下代码,但在它们的设置差异中创建了空值。代码:
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 中以更优雅的方式完成吗?
解决方案
我希望这会有所帮助,它为您提供了 Set 中的列值
val set2 = df2.select("Flowers").as[String].collect().toSet
推荐阅读
- c - 如何将字符串值转换为数值?
- python - 如何列出 OpenAI 健身房中每个状态的可能后继状态?(严格用于正常的 MDP)
- javascript - 为什么以及在哪里需要 bundle.js?
- regex - 正则表达式:搜索特定的变音符号并用 ASCII 替换特定标签(记事本++)
- python-3.x - opencv 中的 ROI 坐标如何工作
- java - Itext 7 在许可证密钥验证器上抛出空指针异常
- java - servlet 只显示数据库中的一个数据而不是全部
- php - 如果图像未上传到服务器,如何调试
- elasticsearch - 带有 tcp 的 Logstash,错误:java.io.IOException: Connection reset by peer
- python - 在pyspark中将两个列表传递给pandas_udf?