火花程序找到人口最多的城市[重复]

Posted

技术标签:

【中文标题】火花程序找到人口最多的城市[重复]【英文标题】:spark program to find the city with maximum population [duplicate] 【发布时间】:2016-11-14 14:33:01 【问题描述】:

输入文件包含如下行(州、城市、人口):

west bengal,kolkata,150000
karnataka,bangalore,200000
karnataka,mangalore,80000
west bengal,bongaon,50000
delhi,new delhi,100000
delhi,gurgaon,200000

我必须用 Python 和 Scala 编写一个 Spark (Apache Spark) 程序才能找到人口最多的城市。输出将是这样的:

west bengal,kolkata,150000
karnataka,bangalore,200000
delhi,new delhi,100000

所以我需要为每个状态提供一个三列输出。我很容易得到这样的输出:

west bengal,15000
karnataka,200000
delhi,100000

但是要让城市拥有最大的人口变得越来越困难。

【问题讨论】:

在问题中包含您已经尝试过的内容(包括代码 sn-ps)总是有帮助的。 【参考方案1】:

在 vanilla pyspark 中,将您的数据映射到一对 RDD,其中状态是键,值是元组(城市、人口)。然后reduceByKey 保留最大的城市。请注意,对于人口相同的城市,它将保留遇到的第一个城市。

rdd.map(lambda reg: (reg[0],[reg[1],reg[2]])) .reduceByKey(lambda v1,v2: ( v1 if v1[1] >= v2[1] else v2))

您的数据的结果如下所示:

[('delhi', ['gurgaon', 200000]), ('west bengal', ['kolkata', 150000]), ('karnataka', ['bangalore', 200000])]

【讨论】:

【参考方案2】:

这应该可以解决问题:

>>> sc = spark.sparkContext
>>> rdd = sc.parallelize([
    ['west bengal','kolkata',150000],
    ['karnataka','bangalore',200000],
    ['karnataka','mangalore',80000],
    ['west bengal','bongaon',50000],
    ['delhi','new delhi',100000],
    ['delhi','gurgaon',200000],
])

>>> df = rdd.toDF(['state','city','population'])
>>> df.show()
+-----------+---------+----------+
|      state|     city|population|
+-----------+---------+----------+
|west bengal|  kolkata|    150000|
|  karnataka|bangalore|    200000|
|  karnataka|mangalore|     80000|
|west bengal|  bongaon|     50000|
|      delhi|new delhi|    100000|
|      delhi|  gurgaon|    200000|
+-----------+---------+----------+


>>> df.groupBy('city').max('population').show()
+---------+---------------+
|     city|max(population)|
+---------+---------------+
|bangalore|         200000|
|  kolkata|         150000|
|  gurgaon|         200000|
|mangalore|          80000|
|new delhi|         100000|
|  bongaon|          50000|
+---------+---------------+

>>> df.groupBy('state').max('population').show()
+-----------+---------------+
|      state|max(population)|
+-----------+---------------+
|      delhi|         200000|
|west bengal|         150000|
|  karnataka|         200000|
+-----------+---------------+

【讨论】:

实际上我想要输出的每一行中的三列包含州、最大人口的城市名称和相应的人口。

以上是关于火花程序找到人口最多的城市[重复]的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode1854. 人口最多的年份(C++)

LeetCode 1854.人口最多的年份 Maximum Population Year(Java)

R语言处理1975-2011年的人口信息

使用KeystoneJs的猫鼬两级人口[重复]

获取一个国家所有城市的坐标和人口

中国人口流动数据挖掘分析云平台