scala - 基于用户输入的过滤条件 Spark Scala
问题描述
我必须根据用户输入应用过滤条件。假设以下条件和“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
解决方案
如果有一组已知的用户可以要求做的事情,您可以执行以下操作:
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)
推荐阅读
- vb.net - OpenXml SDK word 文档更改不可见
- html - 如何在单行中显示两个相邻的字符串,其中右侧的字符串始终完全可见,如果太长,则左侧的字符串会被截断?
- asp.net-mvc - .net Core 5 _userManager.RemoveFromRolesAsync 错误:用户名“XXXX”无效,只能包含字母或数字
- mysql - MYSQL CLUSTER 在 ubuntu 20 中显示 mgmd init 错误
- javafx - 在 Suse Linux 的 javaFX 视图中,无法从在不同域中运行的 ui 调用 rest api
- r - 使用 r 中的分箱数据覆盖和显示不正确的 X 轴:geom_bar 与 ggplot2 中的 facet_grid
- r - 如何将我的基本文件列表与其对应的匹配“表型”文件匹配
- django - 如何从 Django 管理页面中删除“帐户”部分
- amazon-web-services - 使用 AWS CDK 更新 LaunchTemplate 并使其成为默认版本
- c# - 使用统一 c# 我想打开或关闭一个包含所有组件的游戏对象