apache-spark-sql - Apache Spark SQL:如何使用 GroupBy 和 Max 过滤数据
问题描述
我有一个具有以下结构的给定数据集:
https://i.imgur.com/Kk7I1S1.png
我需要使用 SparkSQL 解决以下问题:Dataframes
对于每个邮政编码,找到以前发生事故最多的客户。在平局的情况下,这意味着多个客户的事故数量相同,只需退回其中任何一个即可。对于这些选定的客户中的每一个,输出以下列:邮政编码、客户 ID、先前事故的数量。
解决方案
我认为您错过了提供您在图片链接中提到的数据。通过将您的问题作为参考,我创建了自己的数据集。您可以使用下面的代码片段仅供参考,也可以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 |
+--------+--------+---------+
推荐阅读
- python - 如何点安装“lru”?
- javascript - 如何从两个 input="text" 和 textarea 中获取数据,然后将它们显示在里面
- javascript - 如何查看我的机器人所在的公会中有多少人?
- r - Shiny 正常退出,代码 137,信号 9 (SIGKILL)
- django - 在 Django 中保存具有 OneToOne 关系的模型时出现 TransactionManagementError
- flutter - 需要一种解决方法,让 Indexedstack 总是和最大的孩子一样大
- python - 在创建备份时从 Python 中的多个文件中删除字符串
- android - ScrollView 的背景导致应用程序崩溃
- networking - 对 IP 转发端口未返回的响应
- reactjs - 世博会图标显示问号