如何遍历dataFrame的每一行,并根据条件删除该行

时间:2020-05-01 19:57:19

标签: scala dataframe apache-spark for-loop if-statement

我是Spark&scala的初学者。我想知道如何遍历dataFrame的每一行,并根据条件删除该行。

1 个答案:

答案 0 :(得分:0)

您可以对数据框使用过滤操作,在该数据框中您可以根据要过滤记录的条件指定条件。下面是一个示例:

import org.apache.spark.sql.SparkSession
import org.apache.spark.sql.{DataFrame, functions => F}


object Example extends App {

  val spark = SparkSession.builder.appName("Simple Application").master("local")
    .getOrCreate()

  import spark.implicits._

  val df1 = spark.sparkContext.parallelize(
    List(
      ("Cust1", "Prod1", "Promo1", 1),
      ("Cust1", "Prod1", "Promo2", 2),
      ("Cust2", "Prod5", "Promo4", 11),
      ("Cust2", "Prod8", "Promo4", 12),
      ("Cust3", "Prod3", "Promo9", 14),
      ("Cust3", "Prod2", "Promo6", 13)
    )).toDF("customer", "product", "promotion", "cardid")

   .show()

}

以上代码的输出为:

+--------+-------+---------+------+
|customer|product|promotion|cardid|
+--------+-------+---------+------+
|   Cust1|  Prod1|   Promo1|     1|
|   Cust1|  Prod1|   Promo2|     2|
+--------+-------+---------+------+

在上面的示例中,我过滤了记录,其中product列中的值为“ Prod1”,如以下所示:df1.filter(F.col("product") === "Prod1")

筛选操作会在数据帧的每一行上进行迭代,并检查提供的条件,并保留条件为真的所有记录。