如何在 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
) 作为参数,它是一个中间数据框(因为它会一次重命名一个列),另一个参数是列表的当前元素(此处列表包含名称需要修改的列数)。
如何将以 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
) 作为参数,它是一个中间数据框(因为它会一次重命名一个列),另一个参数是列表的当前元素(此处列表包含名称需要修改的列数)。