Scala Spark DataFrame列名大小写转换及警告问题求助
解决Scala中将DataFrame列名转为小写的警告问题
修复现有代码的弃用警告
你遇到的是Scala 2.13对直接将数组传入可变参数方法的弃用警告,只需将数组转换为IndexedSeq即可消除警告,修改后的代码如下:
df.select(df.columns.map(x => col(x).as(x.toLowerCase)).toIndexedSeq: _*).show(false)
或者使用ArraySeq.unsafeWrapArray(无防御性复制,性能更优):
import scala.collection.immutable.ArraySeq df.select(ArraySeq.unsafeWrapArray(df.columns.map(x => col(x).as(x.toLowerCase))): _*).show(false)
替代的列名转小写方案
你提到df.toDF(df.columns map(_.toLowerCase): _*)无效,大概率是因为原列名转小写后出现重复(Spark不允许DataFrame存在重复列名)。这种情况下,除了上述select方法,还可以通过循环逐个重命名列:
var lowerCaseDf = df for (colName <- df.columns) { lowerCaseDf = lowerCaseDf.withColumnRenamed(colName, colName.toLowerCase) } lowerCaseDf.show(false)
该方法逻辑直观,也能处理列名重复的场景(若存在重复,最后一次重命名会生效,建议业务中尽量避免重复列名)。
内容的提问来源于stack exchange,提问作者guest
相关产品推荐
相关产品推荐

