迭代火花数据帧中的每一行并检查每一行是不是包含某个值
Posted
技术标签:
【中文标题】迭代火花数据帧中的每一行并检查每一行是不是包含某个值【英文标题】:iterate each row in a spark dataframe and check if it each row contains a certain value迭代火花数据帧中的每一行并检查每一行是否包含某个值 【发布时间】:2022-01-19 11:02:02 【问题描述】:我有一个数据框df
,我想提取 Spark-scala 中每一行的值。例如,在第一行中,它应该提取 en
和 sv
然后我会将它们放入 if 条件中。
+----------------+
| Country|
+----------------+
| [en, sv]|
| [sv]|
+----------------+
【问题讨论】:
【参考方案1】:package spark
import org.apache.spark.sql.SparkSession
import org.apache.spark.sql.functions._
object ArrayColumn extends App
val spark = SparkSession.builder()
.master("local")
.appName("DataFrame-example")
.getOrCreate()
import spark.implicits._
case class C(country: Array[String])
val df = Seq(
C(Array("en", "sv")),
C(Array("sv"))
).toDF()
df.show(false)
// +--------+
// |country |
// +--------+
// |[en, sv]|
// |[sv] |
// +--------+
val uniqueDF = df.withColumn("uniqueID", monotonically_increasing_id)
uniqueDF.show(false)
// +--------+--------+
// |country |uniqueID|
// +--------+--------+
// |[en, sv]|0 |
// |[sv] |1 |
// +--------+--------+
val resDF = uniqueDF.withColumn("countryOne", explode(col("country")))
resDF.show(false)
// +--------+--------+----------+
// |country |uniqueID|countryOne|
// +--------+--------+----------+
// |[en, sv]|0 |en |
// |[en, sv]|0 |sv |
// |[sv] |1 |sv |
// +--------+--------+----------+
val resultDF = resDF.filter(col("countryOne").equalTo("en"))
resultDF.show(false)
// +--------+--------+----------+
// |country |uniqueID|countryOne|
// +--------+--------+----------+
// |[en, sv]|0 |en |
// +--------+--------+----------+
【讨论】:
以上是关于迭代火花数据帧中的每一行并检查每一行是不是包含某个值的主要内容,如果未能解决你的问题,请参考以下文章
R - 对于数据框中的每一行,如何检查是不是至少有一列不是 NA? [复制]