我有以下3个表格:
'---- groupedFlightData show(10) -----'
+-----------------+----+------------+
|dest_country_name|year|flight_count|
+-----------------+----+------------+
| Saint Lucia|2011| 102|
| Hungary|2014| 2|
| Guadeloupe|2014| 43|
| Nigeria|2014| 49|
| Fiji|2015| 24|
| Kuwait|2010| 26|
| Cayman Islands|2011| 251|
| Paraguay|2011| 85|
| Austria|2011| 34|
| Gibraltar|2014| 1|
+-----------------+----+------------+
'---- sumAllTrips -----'
+-----------+
|total_count|
+-----------+
| 2352430|
+-----------+
'---- TPY -----'
+----+----------+
|year|year_count|
+----+----------+
|2012| 422180|
|2014| 436855|
|2013| 417869|
|2011| 428426|
|2015| 453316|
|2010| 422269|
+----+----------+
我想使用pyspark SQL将它们全部加入,并且需要结果表为:
'---- stats show(10) -----'
+-----------+----+------------+-------+----------+
| Country|year|flight_count| total|year_count|
+-----------+----+------------+-------+----------+
|Afghanistan|2011| 8|2352430| 390663|
|Afghanistan|2012| 5|2352430| 385290|
|Afghanistan|2010| 11|2352430| 385450|
| Algeria|2015| 4|2352430| 411966|
| Algeria|2014| 9|2352430| 398022|
| Algeria|2013| 2|2352430| 381039|
| Angola|2015| 15|2352430| 411966|
| Angola|2014| 13|2352430| 398022|
| Angola|2011| 13|2352430| 390663|
| Angola|2012| 12|2352430| 385290|
+-----------+----+------------+-------+----------+
我尝试了以下代码:
sqlQuery = spark.sql("""
SELECT groupedFlightData.dest_country_name AS Country, groupedFlightData.year, groupedFlightData.flight_count , TPY.year_count
FROM groupedFlightData
FULL JOIN TPY ON TPY.year=groupedFlightData.year
ORDER BY Country
""")
哪个不完整,我无法弄清楚如何加入没有ID的第三个表sumAllTrips以及如何将它包含在同一个查询中。 我的最终代码必须全部使用SQL查询,不允许使用RDD或基于DF的语法
答案 0 :(得分:1)
你需要的是笛卡尔连接,你可以在spark sql中使用CROSS JOIN
。您的扩展查询可能如下所示:
sqlQuery = spark.sql("""
SELECT groupedFlightData.dest_country_name AS Country,
groupedFlightData.year,
groupedFlightData.flight_count,
sumAllTrips.total_count AS total,
TPY.year_count
FROM groupedFlightData
FULL JOIN TPY ON TPY.year=groupedFlightData.year
CROSS JOIN sumAllTrips
ORDER BY Country
""")