如何在 Spark Scala 中将以 'abcd' 开头的列重命名为以 'wxyz' 开头?

How to rename the columns starting with 'abcd' to starting with 'wxyz' in Spark Scala?

如何将以 abcd 开头的列重命名为以 wxyz 开头的列。

列列表:abcd_name, abcd_id, abcd_loc, empId, empCode

我需要更改以 abcd

开头的数据框中的列名称

必填列列表:wxyz_name, wxyz_id, wxyz_loc, empId, empCode

我尝试使用以下代码获取所有列的列表,但不确定如何实现它。

val df_cols_abcd = df.columns.filter(_.startsWith("abcd")).map(df(_))

你可以用 foldLeft:

val oldPrefix = "abcd"
val newPrefix = "wxyz"
val newDf = df.columns
  .filter(_.startsWith(oldPrefix))
  .foldLeft(df)((acc, oldName) =>
    acc.withColumnRenamed(oldName, newPrefix + oldName.substring(oldPrefix.length))
  )

您第一个使用 startWith 过滤列的想法是正确的。唯一认为您错过了重命名所有列的部分。

如果您不熟悉,我建议您对 foldLeft 进行一些研究。思路如下:

  • 我从一个初始数据帧开始(第一个括号中的df)。
  • 我将对需要重命名的每一列应用一个函数(该函数是第二个括号中的函数)。此函数将一个累加器 (acc) 作为参数,它是一个中间数据框(因为它会一次重命名一个列),另一个参数是列表的当前元素(此处列表包含名称需要修改的列数)。