如何使用 Java 在 Spark 中将数据库的列名更改为大写
How to change column name of database to upper case in Spark using Java
我的 Dataframe 中有一些大小写混合的列名,例如 sum(TXN_VOL)
我想将它们转换为大写,如 SUM(TXN_VOL)
我不会知道所有的列名,所以我不能使用硬编码来转换它们。
或者 我必须遍历所有列名并将它们中的每一个都转换为大写。 OR 有任何内置功能可以将所有列名更改为大写
我试过的是:
String[] columnNames = finalBcDF.columns();
Dataset<Row> x = null;
for(String columnName : columnNames) {
x = finalBcDF.withColumnRenamed(columnName, columnName.toUpperCase());
}
但这每次都会创建新的 Dataframe,因此不会产生预期的结果。
我已经检查了很多网站,但我无法在 Java 中看到如何这样做。
有人可以帮忙吗?
编辑
在其中一个答案中:
为 Scala 和 PySpark 提供了答案,但我无法将其转换为 Java,有人可以帮忙吗?
迭代是个不错的方法。即使创建了新的 DataFrame java class 实例。由于 spark 延迟评估,因此不会有性能损失。
参考:https://data-flair.training/blogs/apache-spark-lazy-evaluation/
以下是使用 Java 8
.
将列名转换为大写的方法
import static org.apache.spark.sql.functions.col;
import org.apache.spark.sql.Column;
df.select(Arrays.asList(df.columns()).stream().map(x -> col(x).as(x.toUpperCase())).toArray(size -> new Column[size])).show(false);
我的 Dataframe 中有一些大小写混合的列名,例如 sum(TXN_VOL)
我想将它们转换为大写,如 SUM(TXN_VOL)
我不会知道所有的列名,所以我不能使用硬编码来转换它们。
或者 我必须遍历所有列名并将它们中的每一个都转换为大写。 OR 有任何内置功能可以将所有列名更改为大写
我试过的是:
String[] columnNames = finalBcDF.columns();
Dataset<Row> x = null;
for(String columnName : columnNames) {
x = finalBcDF.withColumnRenamed(columnName, columnName.toUpperCase());
}
但这每次都会创建新的 Dataframe,因此不会产生预期的结果。
我已经检查了很多网站,但我无法在 Java 中看到如何这样做。
有人可以帮忙吗?
编辑
在其中一个答案中:
为 Scala 和 PySpark 提供了答案,但我无法将其转换为 Java,有人可以帮忙吗?
迭代是个不错的方法。即使创建了新的 DataFrame java class 实例。由于 spark 延迟评估,因此不会有性能损失。
参考:https://data-flair.training/blogs/apache-spark-lazy-evaluation/
以下是使用 Java 8
.
import static org.apache.spark.sql.functions.col;
import org.apache.spark.sql.Column;
df.select(Arrays.asList(df.columns()).stream().map(x -> col(x).as(x.toUpperCase())).toArray(size -> new Column[size])).show(false);