use*_*400 10 apache-spark apache-spark-sql apache-spark-dataset
如何降低数据框列名的大小写而不是其值?使用 RAW Spark SQL 和 Dataframe 方法?
输入数据框(假设我有 100 个大写的这些列)
NAME | COUNTRY | SRC | CITY | DEBIT
---------------------------------------------
"foo"| "NZ" | salary | "Auckland" | 15.0
"bar"| "Aus" | investment | "Melbourne"| 12.5
Run Code Online (Sandbox Code Playgroud)
目标数据框
name | country | src | city | debit
------------------------------------------------
"foo"| "NZ" | salary | "Auckland" | 15.0
"bar"| "Aus" | investment | "Melbourne"| 12.5
Run Code Online (Sandbox Code Playgroud)
Ram*_*jan 25
如果您使用的是scala,则只需执行以下操作
import org.apache.spark.sql.functions._
df.select(df.columns.map(x => col(x).as(x.toLowerCase)): _*).show(false)
Run Code Online (Sandbox Code Playgroud)
如果您使用的是pyspark,则只需执行以下操作
from pyspark.sql import functions as F
df.select([F.col(x).alias(x.lower()) for x in df.columns]).show()
Run Code Online (Sandbox Code Playgroud)
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.toLowerCase())).toArray(size -> new Column[size])).show(false);
Run Code Online (Sandbox Code Playgroud)
对于Java 8
Dataset<Row> input;
for (StructField field : input.schema().fields()) {
String newName = field.name().toLowerCase(Locale.ROOT);
input = input.withColumnRenamed(field.name(), newName);
if (field.dataType() instanceof StructType) {
StructType newStructType = (StructType) StructType.fromJson(field.dataType().json().toLowerCase(Locale.ROOT));
input = input.withColumn(newName, col(newName).cast(newStructType));
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16313 次 |
| 最近记录: |