如何使用Java在Spark中将数据库的列名更改为大写

Posted

技术标签:

【中文标题】如何使用Java在Spark中将数据库的列名更改为大写【英文标题】:How to change column name of database to upper case in Spark using Java 【发布时间】:2019-01-02 05:45:53 【问题描述】:

我的 Dataframe 中有一些混合大小写的列名,例如 sum(TXN_VOL) 我想将它们转换为大写,例如SUM(TXN_VOL)

我不会知道所有的列名,所以我不能使用硬编码来转换它们。

要么我必须遍历所有列名并将它们中的每一个都转换为大写。 有任何内置功能可以将所有列名更改为大写

我尝试的是:

String[] columnNames = finalBcDF.columns();
                    Dataset<Row> x = null;
                    for(String columnName : columnNames) 
                    x = finalBcDF.withColumnRenamed(columnName, columnName.toUpperCase());
                

但这每次都会创建新的数据框,所以不会产生预期的结果。

我已经检查了很多网站,但我无法看到如何在 Java 中这样做。

有人可以帮忙吗?

编辑

在其中一个答案中:

How to lower the case of column names of a data frame but not its values?

已为 Scala 和 PySpark 提供了答案,但我无法将其转换为 Java,有人可以帮忙吗?

【问题讨论】:

【参考方案1】:

以下是使用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);

【讨论】:

【参考方案2】:

迭代将是很好的方法。即使创建了新的 DataFrame java 类实例。由于 spark 是惰性评估的,所以不会有性能损失。

参考:https://data-flair.training/blogs/apache-spark-lazy-evaluation/

【讨论】:

以上是关于如何使用Java在Spark中将数据库的列名更改为大写的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Pyspark 中将字符串更改为时间戳?

在java中将数据库从MySQL更改为PostgreSQL

将列名更改为 MySQL 表中的第一行

在pyspark中将Unix(Epoch)时间更改为本地时间

在eclipse中将java doubles更改为浮点数

无法在 Spark 中将 CSV 文件加载为数据框