Spark DataFrame并重命名多列(Java)

时间:2015-10-08 12:20:17

标签: java apache-spark apache-spark-sql

在给定的SparkSQL DataFrame的同时,是否有更好的方法可以为所有或多个列添加前缀或重命名,而不是多次调用dataFrame.withColumnRenamed()

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

4 个答案:

答案 0 :(得分:0)

我刚刚找到答案

df1_r = df1.select(*(col(x).alias(x + '_df1') for x in df1.columns))

stackoverflow here(见接受答案的结尾)

答案 1 :(得分:0)

or (a <- 0 to newsales.columns.length - 1) 
{ 
 var new_c = newsales.columns(a).replace('(','_').replace(')',' ').trim  
 newsales_var = newsales.withColumnRenamed(newsales.columns(a),new_c) 
}

答案 2 :(得分:0)

我认为这种方法可以为您提供帮助。

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

答案 3 :(得分:-1)

虽然它没有直接回答你的问题,但我总是逐个更新列名。由于它只更新DF元数据,因此逐个更新列名没有任何损害(没有性能影响),例如:

for c in DF.columns:
    new_c = c.strip().replace(' ','_')
    DF = DF.withColumnRenamed(c, new_c)