我有一个很大的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亿行,这种方法非常慢。我想知道是否有更好的方法更快,更有效地达到相同的结果。