火花程序找到人口最多的城市[重复]
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|
+-----------+---------------+
【讨论】:
实际上我想要输出的每一行中的三列包含州、最大人口的城市名称和相应的人口。以上是关于火花程序找到人口最多的城市[重复]的主要内容,如果未能解决你的问题,请参考以下文章