首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Scala中设计避免if-else梯形图的数据帧规则引擎

在Scala中设计避免if-else梯形图的数据帧规则引擎
EN

Stack Overflow用户
提问于 2020-04-08 17:13:55
回答 1查看 244关注 0票数 0

我想添加一列(“new_col”)。在基于不同规则的数据帧中,该规则是从现有列计算得出的。这些规则很复杂,有时会根据数据帧的4-5列进行计算。请参考以下代码片段:

代码语言:javascript
复制
old dataframe = df(A,B,C,D,E,F,G,H)

new dataframe = old_dataframe.withcolums("new_col", myudf(col(A),col(B),col(C),col(D),col(E)))

entries in col(new_col) is computed as following:

def myudf(A,B,C,D,E): String = {
    if (A=="something") {
          if (B="something") {
            return val1
          } else {
            if (C>"something" || D<"something") {
             return val2
            }
            else {
              return func(E)
            }
          }
        } else {
         return val3
        }
      }
}

目前,我已经编写了UDF,它接受所有需要的列,并返回要添加的新列的值。但问题是,由于更多的规则,udf函数变得相当复杂,变成了if-else阶梯。我想要避免它,如果可能的话,我正在考虑重构。我还研究了避免if-else阶梯的其他答案,但对于这个数据框架,没有讨论任何解决方案。

有没有人能建议在scala中为数据帧编写这样的规则?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-08 17:49:58

你为什么不试试模式匹配呢?比使用if和elses要清楚得多。

代码语言:javascript
复制
   (A,B, C, D) match {
    case ("something", "something", _, _)=> val1
    case ("something", _, cValue, dValue) if cValue > "something" || dValue <"something" => val2
    case ("something", _, _, _ ) => func(E)
    case _ => val3
  }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61097188

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档