在给定的SparkSQL DataFrame
的同时,是否有更好的方法可以为所有或多个列添加前缀或重命名,而不是多次调用dataFrame.withColumnRenamed()
?
如果我想检测更改(使用完全外连接),则会有一个示例。然后我留下两个具有相同结构的DataFrame
s。
答案 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)