【问题标题】:Count the frequency of each word in a line of a text-Pyspark计算文本行中每个单词出现的频率-Pyspark
【发布时间】:2021-12-31 01:33:45
【问题描述】:

我在 PySpark 中用这个表单创建了一个 rdd:

[(0, ('This', 1)), (0, ('is', 1)), (0, ('the', 1)), (0, ('100th', 1)), (0, ('Etext', 1)), (0, ('file', 1)), (0, ('presented', 1)), (0, ('by', 1)), (0, ('Project', 1)), (0, ('Gutenberg,', 1)), (0, ('and', 1)), (1, ('is', 1)), (1, ('presented', 1)), (1, ('in', 1)), (1, ('cooperation', 1)), (1, ('with', 1)), (1, ('World', 1)), (1, ('Library,', 1)), (1, ('Inc.,', 1)), (1, ('from', 1))]

对于第一个项目this 位于第一个row(0)。我加了1就可以得到频率了。

我找不到解决此问题的方法。使用aggregateByKeyreduceByKey 后我期望的输出是例如:在第0 行,单词This 被使用了1 次等等......

[(0, ('This', 1, 'is', 1, 'the', 1, ...)), ...]

【问题讨论】:

    标签: python pyspark rdd word-count


    【解决方案1】:

    找出每行单词出现的次数并将它们组合在一起:

    1. 映射RDD中的元素,使得行号和单词成为键(即,),(0,('This',1))变成((0,'This'),1)李>
    2. 通过对第 1 步中出现的次数求和来减少 RDD
    3. 重新映射第 2 步的结果以将行号作为键
    4. ReduceByKey 组合(单词,总行数)的元组
    rdd = spark.sparkContext.parallelize([(0, ('a', 1)), (0, ('b', 1)), (0, ('a', 1)), (1, ('a', 1))])
    
    occurences_per_line = rdd.map(lambda x: ((x[0], x[1][0]), x[1][1])).reduceByKey(lambda x, y: x + y)
    
    occurences_per_line.map(lambda x: (x[0][0], (x[0][1], x[1]))).reduceByKey(lambda x, y: x + y).collect()
    
    """
    [(0, ('a', 2, 'b', 1)), (1, ('a', 1))]
    """
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-25
      • 1970-01-01
      相关资源
      最近更新 更多