【问题标题】:Scala : Filter DF rows based upon column value which exists in a predefined Array Spark 1.6Scala:根据预定义数组 Spark 1.6 中存在的列值过滤 DF 行
【发布时间】:2020-12-04 17:54:40
【问题描述】:

我的问题和this post差不多

我有一个数据框,我需要过滤掉列值不是预定义数组中的子字符串的行。

例如:List = ["apple" , "grapes" , "melon"]

+--------+-----------+
|quantity|      fruit|
+--------+-----------+
|      12|      apple|
|      24|green apple|
|       6|     grapes|
|      11|      mango|
|      12| watermelon|
|      15|  muskmelon|
|      22|    berries|
+--------+-----------+

使用数组过滤后,我的 df 应该是这样的:

+--------+-----------+
|quantity|      fruit|
+--------+-----------+
|      12|      apple|
|      24|green apple|
|       6|     grapes|
|      12| watermelon|
|      15|  muskmelon|
+--------+-----------+

应过滤掉列值为“mango”和“berries”的行,因为预定义列表中不存在子字符串。

spark 1.6 有什么建议或想法吗?

【问题讨论】:

    标签: scala dataframe apache-spark pyspark user-defined-functions


    【解决方案1】:

    使用 .rlike 函数,通过列表中的| 创建一个字符串。

    Example:

    df.show()
    /*
    +--------+-----------+
    |quantity|      fruit|
    +--------+-----------+
    |      12|      apple|
    |      24|green apple|
    |       6|     grapes|
    |      11|      mango|
    |      12| watermelon|
    |      15|  muskmelon|
    |      22|    berries|
    +--------+-----------+
    */
    
    import org.apache.spark.sql.functions._
    
    val list=Seq("apple" , "grapes" , "melon").mkString("|")
    //list: String = apple|grapes|melon
    
    df.filter(col("fruit").rlike(list)).show()
    /*
    +--------+-----------+
    |quantity|      fruit|
    +--------+-----------+
    |      12|      apple|
    |      24|green apple|
    |       6|     grapes|
    |      12| watermelon|
    |      15|  muskmelon|
    +--------+-----------+
    */
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多