En primer lugar, gracias por el tiempo en leer mi pregunta.
Mi pregunta es la siguiente: En Spark con Java, cargo en dos dataframes los datos de dos archivos csv.
Estos marcos de datos tendrán la siguiente información.
Aeropuerto de marco de datos
Id | Name | City ----------------------- 1 | Barajas | MadridMarco de datos aeropuerto_ciudad_estado
City | state ---------------- Madrid | EspañaQuiero unir estos dos marcos de datos para que se vea así:
resultado del marco de datos
Id | Name | City | state -------------------------- 1 | Barajas | Madrid | España Donde dfairport.city = dfaiport_city_state.city
Pero no puedo aclarar con la sintaxis para poder hacer la unión correctamente. Un pequeño código de cómo he creado las variables:
// Load the csv, you have to specify that you have header and what delimiter you have Dataset <Row> dfairport = Load.Csv (sqlContext, data_airport); Dataset <Row> dfairport_city_state = Load.Csv (sqlContext, data_airport_city_state); // Change the name of the columns in the csv dataframe to match the columns in the database // Once they match the name we can insert them Dfairport .withColumnRenamed ("leg_key", "id") .withColumnRenamed ("leg_name", "name") .withColumnRenamed ("leg_city", "city") dfairport_city_state .withColumnRenamed("city", "ciudad") .withColumnRenamed("state", "estado");Puede usar el método de join con el nombre de la columna para unir dos marcos de datos, por ejemplo:
Dataset <Row> dfairport = Load.Csv (sqlContext, data_airport); Dataset <Row> dfairport_city_state = Load.Csv (sqlContext, data_airport_city_state); Dataset <Row> joined = dfairport.join(dfairport_city_state, dfairport_city_state("City")); También hay una versión sobrecargada que le permite especificar el tipo de join como tercer argumento, por ejemplo:
Dataset <Row> joined = dfairport.join(dfairport_city_state, dfairport_city_state("City"), "left_outer");
Aquí hay más información sobre las uniones.
Primero, muchas gracias por tu respuesta.
Probé mis dos soluciones pero ninguna funciona, aparece el siguiente error: El método dfairport_city_state (String) no está definido para el tipo ETL_Airport
No puedo acceder a una columna específica del marco de datos para unirme.
EDITAR: Ya tengo que hacer la unión, pongo aquí la solución en caso de que alguien más ayude;)
Gracias por todo y un saludo
//Join de tablas en las que comparten ciudad Dataset <Row> joined = dfairport.join(dfairport_city_state, dfairport.col("leg_city").equalTo(dfairport_city_state.col("city")));