使用 Spark 统计撤销订单中撤销理由最多的前 10 种理由(因撤销理由为未知的数据过多,统计时不包含撤销理由值未知的数据)。数据集所在位置:/data/workspace/myshixun/data/canceldata.txt,数据集文件字段之间以|分割,文件部分数据展示如下: 1200DDCX3307|430104|湖南省长沙市岳麓区|17625076885092|2019-03-07 17:32:27|2019-03-07 17:38:33|2|5|未知 1100YDYC423D|430602|湖南省岳阳市岳阳楼区|6665578474529331090|2019-03-07 17:28:46|2019-03-07 17:29:09|1|1|第三方接口取消 shouyue|430100|湖南省长沙市|P190307171256186000|2019-03-07 17:12:55|2019-0
时间: 2023-10-15 15:04:24 浏览: 202
SequoiaDB+SparkSQL在数据统计场景的应用
好的,这是一个非常具体的问题,我可以帮你提供代码实现:
```python
from pyspark import SparkConf, SparkContext
conf = SparkConf().setMaster("local").setAppName("CancelReasonCount")
sc = SparkContext(conf=conf)
# 读取数据
data = sc.textFile("/data/workspace/myshixun/data/canceldata.txt")
# 过滤出撤销理由不为未知的数据
valid_data = data.filter(lambda x: "未知" not in x)
# 将每个撤销理由的计数累加
cancel_reason_count = valid_data.map(lambda x: x.split("|")[9]) \
.map(lambda x: (x, 1)) \
.reduceByKey(lambda x, y: x + y)
# 取前 10 种理由
top_10_reasons = cancel_reason_count.takeOrdered(10, key=lambda x: -x[1])
# 输出结果
for reason, count in top_10_reasons:
print(f"{reason}: {count}")
```
这段代码通过 Spark 读取数据集,过滤出撤销理由不为未知的数据,然后对每个撤销理由的计数进行累加,最后取出撤销理由计数前 10 的理由并输出。
阅读全文