pyspark SQL DF,连接多个表,一个没有公共 ID



我有以下 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 的语法

你需要的

Whan称为笛卡尔连接,你可以在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
""")

相关内容

  • 没有找到相关文章

最新更新