迭代火花数据帧中的每一行并检查每一行是不是包含某个值

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 中每一行的值。例如,在第一行中,它应该提取 ensv 然后我会将它们放入 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? [复制]

迭代大型数据集 R-Studio 的每一行

在每个元素都是列表的数据帧中运行 Scipy Linregress

迭代稀疏矩阵并连接每一行的数据和索引

如何计算每一行的值?