Leer la segunda fila de un csv
UltraSimpleCSVProcessor
imimport org.apache.spark.sql.*;
public class CSVHeaderInRow2Processor {
public static void main(String[] args) {
SparkSession spark = SparkSession.builder()
.appName("CSV Headers in Row 2")
.master("local[*]")
.getOrCreate();
// 1. Leer el archivo CSV con la primera fila como encabezado
Dataset<Row> dataWithWrongHeader = spark.read()
.option("header", "true") // La primera fila tiene "data" como cabecera
.csv("ruta/al/archivo.csv");
// En este punto, tenemos un DataFrame con una columna llamada "data"
// 2. Guardar la primera fila de datos (que realmente contiene los nombres de columnas)
String headerLine = dataWithWrongHeader.first().getString(0);
// 3. Dividir esta línea por comas para obtener los nombres de columnas reales
String[] columnNames = headerLine.split(",");
// 4. Filtrar el DataFrame para excluir la primera fila (la que contiene los nombres reales)
Dataset<Row> dataOnly = dataWithWrongHeader.filter(
dataWithWrongHeader.col("data").notEqual(headerLine)
);
// 5. Dividir la columna "data" en múltiples columnas
Dataset<Row> processedData = dataOnly;
for (int i = 0; i < columnNames.length; i++) {
processedData = processedData.withColumn(
columnNames[i],
functions.split(dataOnly.col("data"), ",").getItem(i)
);
}
// 6. Eliminar la columna original "data"
processedData = processedData.drop("data");
// Mostrar el resultado final
processedData.show();
spark.stop();
}
}
Comentarios
Publicar un comentario