Separacion de archivos csv por comas

Aquí tienes un ejemplo completo con datos de prueba:

java
import org.apache.spark.sql.*;
import org.apache.spark.sql.types.*;
import java.util.Arrays;
import java.util.List;
import static org.apache.spark.sql.functions.*;

public class SparkCSVParserExample {
    public static void main(String[] args) {
        // Crear la sesión de Spark
        SparkSession spark = SparkSession.builder()
            .appName("CSVParserExample")
            .master("local[*]")
            .getOrCreate();
            
        // Crear datos de ejemplo donde cada fila es una cadena CSV completa
        List<String> rawDataList = Arrays.asList(
            "id,nombre,direccion,edad",
            "101,\"Juan, Pérez\",\"Calle Principal, #45, Ciudad\",30",
            "102,\"María Rodríguez\",\"Av. Central #123\",25",
            "103,\"Carlos, López, García\",\"Plaza Mayor, Piso 3, Apt 2B\",42",
            "104,\"Ana Silva\",\"Sin dirección\",29"
        );
        
        // Convertir los datos a DataFrame
        Dataset<Row> rawData = spark.createDataset(rawDataList, Encoders.STRING()).toDF("data");
        
        System.out.println("Datos originales:");
        rawData.show(10, false);
        
        // 1. Obtener el encabezado
        String headerLine = rawData.first().getString(0);
        
        // 2. Limpiar el encabezado
        String cleanHeader = headerLine.trim();
        
        // 3. Filtrar la línea de encabezado
        Dataset<Row> dataWithoutHeader = rawData.filter(row -> !row.getString(0).equals(headerLine));
        
        // 4. Usar la función from_csv para parsear correctamente
        Dataset<Row> parsedData = dataWithoutHeader
            .select(
                functions.from_csv(
                    col("data"),
                    cleanHeader,
                    functions.map(
                        "multiLine", "false",
                        "quote", "\"",
                        "escape", "\"",
                        "header", "false",
                        "mode", "PERMISSIVE"
                    )
                ).as("parsed_data")
            );
        
        // 5. Expandir la estructura en columnas separadas
        Dataset<Row> processedData = parsedData.select("parsed_data.*");
        
        // 6. Mostrar el resultado
        System.out.println("Datos procesados correctamente:");
        processedData.show(10, false);
        
        // 7. También podemos verificar el esquema
        System.out.println("Esquema del DataFrame procesado:");
        processedData.printSchema();
        
        spark.stop();
    }
}

Resultado esperado:

Comentarios

Entradas populares de este blog

Pequeño server local

CobolParser Para Spark

iteratorSeguro