我有一个给定的数据集,结构如下:
https://i.imgur.com/Kk7I1S1.png
我需要使用SparkSQL解决以下问题:
对于每个邮政编码,找出以前发生事故次数最多的客户。在平局的情况下,意味着多个客户具有相同的最高事故数量,只需返回其中任何一个即可。对于这些选定的客户中的每一个,输出以下列:邮政编码、客户id、以前的事故数量。
发布于 2019-06-07 14:44:33
我认为你错过了提供你在图像链接中提到的数据。我已经创建了自己的数据集,将您的问题作为参考。您可以使用下面的代码片段作为参考,也可以用您的数据集替换df数据框来添加所需的列,如id等。
scala> val df = spark.read.format("csv").option("header","true").load("/user/nikhil/acc.csv")
df: org.apache.spark.sql.DataFrame = [postcode: string, customer: string ... 1 more field]
scala> df.show()
+--------+--------+---------+
|postcode|customer|accidents|
+--------+--------+---------+
| 1| Nikhil| 5|
| 2| Ram| 4|
| 1| Shyam| 3|
| 3| pranav| 1|
| 1| Suman| 2|
| 3| alex| 2|
| 2| Raj| 5|
| 4| arpit| 3|
| 1| darsh| 2|
| 1| rahul| 3|
| 2| kiran| 4|
| 3| baba| 4|
| 4| alok| 3|
| 1| Nakul| 5|
+--------+--------+---------+
scala> df.createOrReplaceTempView("tmptable")
scala> spark.sql(s"""SELECT postcode,customer, accidents FROM (SELECT postcode,customer, accidents, row_number() over (PARTITION BY postcode ORDER BY accidents desc) as rn from tmptable) WHERE rn = 1""").show(false)
+--------+--------+---------+
|postcode|customer|accidents|
+--------+--------+---------+
|3 |baba |4 |
|1 |Nikhil |5 |
|4 |arpit |3 |
|2 |Raj |5 |
+--------+--------+---------+https://stackoverflow.com/questions/56487053
复制相似问题