Spark 性能调优实战
吴磊
前 FreeWheel 机器学习团队负责人
8808 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 36 讲
Spark 性能调优实战
15
15
1.0x
00:00/00:00
登录|注册

30|应用开发:北京市小客车(汽油车)摇号趋势分析

你好,我是吴磊。
如果你也在北京生活,那小汽车摇号这件事大概率也和你息息相关。我身边很多人也一直都和我抱怨说:“小汽车摇号这件事太难了,遥遥无期,完全看不到希望,感觉还没买彩票靠谱呢”。
实不相瞒,我自己也在坚持小汽车摇号,在享受 8 倍概率的情况下,还是没能中签。因此,包括我在内的很多人都想知道,为什么摇号这么费劲?一个人平均需要参与多少次摇号才会中签?中签率的变化趋势真的和官方宣布的一致吗?倍率这玩意儿,真的能提高中签的概率吗?
这些问题,我们都能通过开发一个北京市小汽车摇号趋势分析的应用来解答。我会用两讲的时间带你完成这个应用的开发,在这个过程中,我们可以把前面学过的原理篇、通用调优篇和 Spark SQL 调优篇的大部分知识都上手实践一遍,是不是一听就很期待呢?
话不多说,我们赶紧开始吧!

课前准备

既然是做开发,那我们就需要做一些准备工作。准备工作分为 3 部分,分别是准备数据、准备开发环境和准备运行环境。

准备数据

应用所需的数据,我已经帮你准备好,也上传到了网盘,你可以点击这个地址,输入提取码 ajs6 进行下载。
数据的文件名是“2011-2019 小汽车摇号数据.tar.gz”,解压之后的目录结构如下图所示。根目录下有 apply 和 lucky 两个子目录,apply 的目录内容是 2011-2019 年各个批次参与摇号的申请编号,lucky 目录包含的是各个批次中签的申请编号。方便起见,我们把参与过摇号的人叫“申请者”,把中签的人叫“中签者”。apply 和 lucky 的下一级子目录是各个摇号批次,而摇号批次目录下包含的是 Parquet 格式的数据分片。
数据的文件目录结构
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

北京小客车摇号一直备受关注,但为何如此艰难?本文作者吴磊分享了开发一个北京市小汽车摇号趋势分析应用的过程。文章通过技术分析,深刻揭示了北京小客车摇号的复杂性和难度,为读者提供了深入的技术视角和洞察。作者详细讲解了应用开发的过程,包括人数统计和摇号次数分布的案例分析。通过数据分析和代码实现,展示了申请者和中签者的分布情况,中签者的摇号次数越多,数量越少,以及中签率的变化趋势。文章通过技术分析,深刻揭示了北京小客车摇号的复杂性和难度,为读者提供了深入的技术视角和洞察。同时,对倍率分布情况和不同倍率人群的中签比例进行了观察。通过对摇号次数分布、中签率变化趋势、中签率的大变动、倍率分布与中签比例的分析,为读者提供了全面的了解和洞察。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Spark 性能调优实战》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(6)

  • 最新
  • 精选
  • 猪猪
    吴磊老师好~ 默默学了老师的课程,哈哈这节课关注点完全在为啥我没中签了。关键还是我和老公两个8倍率摇号都不中,这大概只能怪人品了呢。。。 官方的倍数太简单粗暴了,我觉得可以考虑用指数方式进行放大摇号时间长的人的倍数。两个初步想法,应该还得更多考虑公平再加细化。 (1)倍率=EXP(LOG2(MAX(1,累计摇号期数-MagicNum))。 经初步计算,假设MagicNum为36,摇号71期的可以有1.1%的中签率;MagicNum为48,摇号71期的可以有3.3%的中签率;MagicNum为60,摇号71期的可以有3.8%的中签率。 (2)倍率=100.0*sigmoid(累计摇号期数-MagicNum)。其中sigmoid=1/(1+exp(-z))为常用的函数,它的取值范围(0,1)。 为了保证总参与摇号样本数不至于过多还可以考虑同比例缩小倍数等等。初步尝试添加一些权重换算后发现这两种方法都可以把摇号很久的概率提高到百分之几。 另外老师我想请问下,所有批次一起统计官方倍率下中签率会不会是幸存者偏差导致的正态分布,因为中签的后面批次就不参与摇号了。我统计每一批次官方倍数下中签率,除了13,12倍数据基数太小不满足统计规律外,整体中签率确实是倍数越高中签率越高的。但是其实高那么零点几百分比完全无效哈哈。我用sql把意思写在下面,希望老师指正。 批次 倍数 参与人数 中签人数 中签率 201906 13 47 0 0.000% 201906 12 81094 338 0.417% 201906 11 102792 436 0.424% 201906 10 142112 530 0.373% 201906 9 235860 789 0.335% 201906 8 248556 712 0.286% 201906 7 263499 677 0.257% 201906 6 378509 829 0.219% 201906 5 407661 746 0.183% 201906 4 381066 585 0.154% 201906 3 362343 391 0.108% 201906 2 359586 244 0.068% 201906 1 372312 107 0.029% # 1. 统计每一批次官方倍数下中签率 SELECT aa.batchnum, aa.times, count(*) all_num, count(bb.carnum) AS lucky_num, count(bb.carnum)/ count(*) AS ratio FROM (SELECT a.batchnum, a.carnum, count(*) AS times FROM apply a GROUP BY a.batchnum, a.carnum) aa LEFT JOIN lucky bb ON (aa.carnum = bb.carnum AND aa.batchnum = bb.batchnum) GROUP BY aa.batchnum, aa.times;

    作者回复: 有道理!老弟考虑得甚是周到!!!棒👍! 首先,你提的两个倍率算法,我深表赞同,这比官方的简单粗暴合理多了~ 我觉得他们应该给你发offer,帮他忙去完善摇号系统~ 再者,关于不同倍率下的中签率统计,你是对的~ 我仔细想了想,确实忽略了这样一个细节:8倍概率摇中号码的人,他曾经也有过7倍、6倍。。。一直到1倍的倍率,所以不能单纯地去max。你说的对,幸存者偏差了,哈哈哈。感谢老弟的提醒~ 我让编辑把这个留言置顶下~ 老弟思考深入、条理清晰,赞~👍

    2021-09-03
    2
    6
  • 斯盖丸
    倍率对于中签的贡献微乎其微十分反常识和直觉呀。。。难道是因为日期越近的人他们的隐藏权重也越高,所以和倍率抵消了么。。?

    作者回复: 关于倍率,我琢磨可能是这么回事,根本原因是基础概率实在是太低了,所以其实乘以个3倍还是8倍已经不重要了,都被稀释掉了。 比如说,基础概率是千分之2,那么3倍的倍率就是千分之6,8倍的倍率就是百分之1.6。 不管是千分之6,还是1.6%,对于庞大的摇号基数来说,其实都可以忽略不计。10的负3次方,这个数量级太低了,而3和8又没有数量级上的差别,因此乘下来差别就微乎其微了。

    2021-05-28
    3
  • 猿鸽君
    从倍率的实现方式来看,感觉就是设计者懒而已。简单的应该可以根据参与次数再计算一个倍率系数,而不是单纯的递增。

    作者回复: 哈哈,严重同意~

    2021-08-26
    2
  • 快跑
    已经不关心spark了。完全沉浸在为什么我没摇中

    作者回复: 哈哈哈[Facepalm]

    2021-05-27
    1
  • Jefitar
    之前在阿里云买的服务器搭建的集群,太贵了,释放了,现在用台式机搞了64G内存,创建了4台虚拟机搭建了集群,晚上到家跑一下,想想怎么优化,然后再看下一章!😄

    作者回复: 666~ 64GB内存足够了,哈哈~

    2021-06-09
  • Jefitar
    买新能源汽车啊,哈哈哈哈

    作者回复: 哈哈,有道理~

    2021-06-09
收起评论
显示
设置
留言
6
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部