Separacion de archivos csv por comas
Aquí tienes un ejemplo completo con datos de prueba:
javaimport 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
Publicar un comentario