首页 > 解决方案 > 爆炸 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 亿行,这种方法非常慢。我想知道是否有更好的方法可以更快、更有效地达到相同的结果。

标签: apache-sparkdataframepyspark

解决方案


推荐阅读