Spark DataFrame 并重命名多列 (Java)

2022-09-03 13:41:24

有没有比多次调用更好的方法来同时在给定的SparkSQL上添加所有或多个列的前缀或重命名?DataFramedataFrame.withColumnRenamed()

例如,如果我想检测更改(使用完全外连接)。然后我剩下两个具有相同结构的s。DataFrame


答案 1

我建议使用select()方法来执行此操作。事实上,使用ColumnRenamed()方法本身使用select()。下面是如何重命名多个列的示例:

import org.apache.spark.sql.functions._

val someDataframe: DataFrame = ...

val initialColumnNames = Seq("a", "b", "c")
val renamedColumns = initialColumnNames.map(name => col(name).as(s"renamed_$name"))
someDataframe.select(renamedColumns : _*)

答案 2

我认为这种方法可以帮助你。

public static Dataset<Row> renameDataFrame(Dataset<Row> dataset) {
    for (String column : dataset.columns()) {
        dataset = dataset.withColumnRenamed(column, SystemUtils.underscoreToCamelCase(column));
    }
    return dataset;
}

    public static String underscoreToCamelCase(String underscoreName) {
        StringBuilder result = new StringBuilder();
        if (underscoreName != null && underscoreName.length() > 0) {
            boolean flag = false;
            for (int i = 0; i < underscoreName.length(); i++) {
                char ch = underscoreName.charAt(i);
                if ("_".charAt(0) == ch) {
                    flag = true;
                } else {
                    if (flag) {
                        result.append(Character.toUpperCase(ch));
                        flag = false;
                    } else {
                        result.append(ch);
                    }
                }
            }
        }
        return result.toString();
    }




推荐