Spark中拼接a、b、c字段总长度不足10时仅给c补前导零的实现问题
错误原因
现有代码将c字段单独补前导零到长度为10,最终拼接后总长度为len(a) + len(b) + 10,不符合总长度为10的要求。
解决方案
核心逻辑为:先计算a、b两个属性拼接后的总长度,当三者原始拼接结果长度小于10时,仅将c补前导零到「10减去a、b总长度」的长度,即可保证三者拼接后总长度刚好为10。
正确代码如下:
// 计算a、b拼接后的总长度 val abTotalLength = length(concat($"a", $"b")) val x = when(length(concat($"a", $"b", $"c")) < 10, concat($"a", $"b", lpad($"c", 10 - abTotalLength, "0")) ).otherwise(concat($"a", $"b", $"c"))
边界说明
如果a、b拼接后的长度已经≥10,那么三者原始拼接结果长度必然≥10,此时会直接走otherwise分支返回原始拼接结果,符合需求。
内容的提问来源于stack exchange,提问作者jakrm
相关产品推荐
相关产品推荐

