Scala中DataFrame列名组合筛选问题求助:startsWith+endsWith失效
解决Scala DataFrame列名组合条件过滤问题
你的代码失效主要是两个小问题导致的:Scala里的逻辑与运算符是&&而非AND,同时lambda表达式的写法需要把两个条件整合到同一个判断逻辑里。
正确的代码实现
val list_inactive_w = usg.columns.filter(colName => colName.startsWith("max_consecut") && colName.endsWith("ays_data_w") )
代码说明
- 我们通过
filter遍历DataFrame的所有列名,用colName指代每一个列名参数 - 用Scala标准的逻辑与运算符
&&同时校验两个条件:- 列名以
max_consecut开头(调用startsWith方法) - 列名以
ays_data_w结尾(调用endsWith方法)
- 列名以
- 你也可以用更简洁的下划线语法(Scala会自动将两个
_解析为同一个参数):
val list_inactive_w = usg.columns.filter(_.startsWith("max_consecut") && _.endsWith("ays_data_w"))
原代码失效的原因
- Scala中不存在
AND关键字,逻辑与运算必须使用&& - 原代码的括号写法错误,
(_.endsWith("ays_data_w"))会被解析成独立的函数,无法和前面的条件组合,直接导致语法错误
内容的提问来源于stack exchange,提问作者INAM
相关产品推荐
相关产品推荐

