【问题标题】: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]|
+----------------+

【问题讨论】:

    标签: scala apache-spark apache-spark-sql


    【解决方案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        |
      // +--------+--------+----------+
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-02-17
      • 2021-10-20
      • 2020-09-22
      • 1970-01-01
      • 2016-12-26
      • 1970-01-01
      • 2022-01-18
      相关资源
      最近更新 更多