apache-spark - 爆炸 Pyspark 数据框列的最有效方法
问题描述
我有一个非常大的 pyspark 数据框。数据框包含两个重要的列:一个键和与该键相关的标记。所以每一行都有一个键和一个标记列表:
load_df.show(5)
+--------------------+-----------+
| token | key |
+--------------------+-----------+
|[-LU4KeI8o, FrWx6...| h9-1256 |
|[] | h1-2112 |
|[HDOksdh_vv, aIHD...| e3-0139 |
|[-LU4KeI8o, FrWx6...| S3-4156 |
+--------------------+-----------+
现在,我想计算每个标记相对于不同键出现的次数。但问题是我所做的一切都变得非常缓慢。我想知道最好的方法是什么?
我试图分解令牌列然后计数。
像这样的东西:
explode_df = load_df.withColumn('token', F.explode('token'))
load_freq = explode_df.groupby('token')\
.count()\
.sort('count', ascending=False)
或这个:
explode_df = load_df.withColumn('token', F.explode('token'))
load_freq = explode_df.groupby('token')\
.agg(F.collect_set('key'), F.count(F.col('key')).alias('count'))\
.sort('count', ascending=True)
数据框有超过 2.5 亿行,这种方法非常慢。我想知道是否有更好的方法可以更快、更有效地达到相同的结果。
解决方案
推荐阅读
- python - 多列文本文件到字典
- javascript - 尝试将 Google Analytics 添加到 Chrome 扩展程序
- mysql - 根据表中每个组的唯一列选择行
- python - matplotlib 渲染为 png 缓慢,但仅在复杂的烧瓶应用程序中
- c - 在 c 中对浮点数进行算术运算时创建的随机数
- search - 如何在 Humio 中搜索不区分大小写的字符串?
- javascript - Safari 和 Firefox 私有模式的选项卡之间是否不共享本地存储?
- python - 创建一个没有开发依赖的 requirements.txt
- ios - didBegin 未检测到两个 SKSpriteNode 之间的接触
- bazel - 如何在客户端检索 bazel 远程缓存指标