提问者:小点点

加入数据框火花java


首先,感谢您花时间阅读我的问题。

我的问题如下:在Spark withJava中,我在两个dataframe中加载两个csv文件的数据。

这些数据帧将具有以下信息。

Dataframe机场

Id | Name    | City
-----------------------
1  | Barajas | Madrid

数据框airport_city_state

City | state
----------------
Madrid | España

我想加入这两个数据帧,使其看起来像这样:

数据框结果

Id | Name    | City   | state
--------------------------
1  | Barajas | Madrid | España

dfairport.citydfaiport_city_state.city

但是我无法澄清语法,所以我可以正确地进行连接。我如何创建变量的一点代码:

 // 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");

共2个答案

匿名用户

首先,非常感谢您的回应。

我已经尝试了我的两个解决方案,但没有一个工作,我得到以下错误:方法dfairport_city_state(字符串)是未定义的类型ETL_Airport

我无法访问数据框的特定列进行连接。

编辑:已经做了加入,我把解决方案放在这里,以防别人帮忙;)

谢谢你所做的一切和最好的问候

//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")));

匿名用户

您可以使用带有列名的join方法连接两个数据帧,例如:

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"));

还有一个重载版本允许您将join类型指定为第三个参数,例如:

数据集

这里有更多关于连接的信息。