对文本中的特定字符计数

2024-09-29 21:55:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个pyspark数据框,其中包含一个文本列。此列中可以包含文本(字符串)信息。我要做的就是在这列的每一行中计算A、B、C、D等。就像:

df = spark.read.csv('Data.csv', header=True)
df.select(['text']).show(truncate = False)
+-------------------------+
|text                     |
+-------------------------+
|BBEBEBEFC                |
|DDBBCDCBBECCBBE          |
|DCDBBEDBBE               |
+-------------------------+

现在我想计算每列中B、C、D等的数量,并创建相应的列,如

+-------------------------+-------------------+
|text                     | B | C | D | E | F |
+-------------------------+---+---+---+---+---+
|BBEBEBEFC                | 4 | 1 | 0 | 3 | 1 | 
|DDBBCDCBBECCBBE          | 6 | 4 | 3 | 2 | 0 |
+-------------------------+---+---+---+---+---+

在熊猫中,可以简单地通过以下方式完成:

df['A'] = df['text'].str.count('A')
...

我希望在Pyspark中不使用循环执行相同的操作(数据量很大)。如果有人能提出更好的方法


Tags: csv数据字符串text文本信息truedf
1条回答
网友
1楼 · 发布于 2024-09-29 21:55:19

拆分、分解、分组依据、轴、计数:

import pyspark.sql.functions as F

df2 = (df.withColumn('miid', F.monotonically_increasing_id().alias('miid'))
         .withColumn('split_text', F.explode(F.split('text', '')))
         .filter("split_text != ''")
         .groupBy('text', 'miid')
         .pivot('split_text')
         .agg(F.count('*'))
         .fillna(0)
         .drop('miid')
      )

df2.show()
+       -+ -+ -+ -+ -+ -+
|           text|  B|  C|  D|  E|  F|
+       -+ -+ -+ -+ -+ -+
|DDBBCDCBBECCBBE|  6|  4|  3|  2|  0|
|     DCDBBEDBBE|  4|  1|  3|  2|  0|
|      BBEBEBEFC|  4|  1|  0|  3|  1|
+       -+ -+ -+ -+ -+ -+

相关问题 更多 >

    热门问题