【问题标题】:Filter condition based on user input Spark Scala基于用户输入的过滤条件 Spark Scala
【发布时间】:2019-11-24 02:40:06
【问题描述】:

我必须根据用户输入应用过滤条件。假设以下条件,“mod”是用户过滤条件字符串输入。

df.filter(df("rollnumber").mod(2))

如何编写一个函数,将参数作为 filtercolumnname、filtercondition、filtervalue 并将其应用于数据框?

期望:

def applyfiltering(filtercolumnname: String,filtercondition : String,filtervalue : String) ={

df.filter(df("rollnumber").mod(2))

}

applyfiltering("rollnumber","mod","2")

提前致谢

我只是这样尝试:

df.filter(df("rollnumber").cast("===")(2)).toDF
df.filter(df("rollnumber").cast("mod")(2)).toDF

【问题讨论】:

    标签: scala apache-spark user-defined-functions scala-collections


    【解决方案1】:

    如果有一组已知的用户可以要求做的事情,您可以这样做:

    val cond1 = df1("rollnumber").mod(lit(2))
    val cond2 = df1("rollnumber") === lit(2)
    
    def applyFiltering(column: Column): Unit = {
      df1.filter(column)
    }
    
    applyFiltering(cond2).show
    

    另一种方法是:

    def applyFiltering(colName: String, filtercondition: String, filtervalue: Any): DataFrame = {
      val dfCol = df1(colName)
      val fltValue = lit(filtervalue)
      val flt: Column =
        if (filtercondition == "===")  dfCol === fltValue 
        else if (filtercondition == "mod") dfCol.mod(fltValue)
        else throw new UnsupportedOperationException()
    
      df1.filter(flt)
    }
    
    applyFiltering("rollnumber", "===", 2)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-04
      • 1970-01-01
      • 2015-11-15
      • 2018-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多