我想添加一列(“new_col”)。在基于不同规则的数据帧中,该规则是从现有列计算得出的。这些规则很复杂,有时会根据数据帧的4-5列进行计算。请参考以下代码片段:
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中为数据帧编写这样的规则?
发布于 2020-04-08 17:49:58
你为什么不试试模式匹配呢?比使用if和elses要清楚得多。
(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
}https://stackoverflow.com/questions/61097188
复制相似问题