scala - Spark Scala如何从列名的开头替换空格字符
问题描述
我有一个数据框 df
df = source_df.select("data.*").distinct()
df.show(20,false)
---------------+----------------+--------------------------+
id |_name |_address |area |
--------------------------+----------------+---------------+
222222222222444|null |india |Default Value |
000000000055555|null |usa |Default Value |
+--------------+----------------+--------------------------+
我想从列名的开头替换空格字符(_),期望的输出将是
---------------+----------------+--------------------------+
id |name |address |area |
--------------------------+----------------+---------------+
222222222222444|null |india |Default Value |
000000000055555|null |usa |Default Value |
+--------------+----------------+--------------------------+
我尝试使用以下语句,但计数未找到期望输出
df=df.columns.foldLeft(df){(newdf, colname) =>newdf.withColumnRenamed(colname, colname.replace("^_", ""))}
解决方案
您可以通过选择进行重命名
val newCols = df.columns.map(c => col(c) as (if (c.startsWith("_")) c.drop(1) else c))
val newDf = df.select(newCols:_*)
这将重命名以开头的列_
并保留不以开头的列。列顺序也将保持不变。
if 条件的替代语法是:
val newCols = df.columns.map(c => if (c.startsWith("_")) col(c) as c.drop(1) else col(c))
val newDf = df.select(newCols:_*)
只是那里的口味问题。
推荐阅读
- python - 在 Tensorflow 2.x 中我们不需要指定输入形状吗?
- wordpress - 如何编写 .htaccess 以将 url 重定向到 AWS CloudFront?
- ios - Swift playground execution aborted
- sql - 使用字母数字和特殊字符值对 varchar 进行排序
- java - 为什么“List myList”作为方法中的参数可以接受 ArrayList
numberList = new ArrayList<>(); - python-3.x - 我想结合 map & lambda 来计算列表中满足给定条件的项目数
- python - 如何在 Open3D 中加载 3D 模型(.obj)?
- python - 将 Spark Data Frame 或 GlobalTempView 与 PySpark 一起使用
- r - 如何使列名中的列成为其值?
- javascript - 遍历对象,如果满足条件,则返回附加标记