统计一行文本中每个单词出现的频率-Pyspark
Count the frequency of each word in a line of a text-Pyspark
我已经在 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就可以得到频率了
我找不到解决这个问题的方法。使用 aggregateByKey
或 reduceByKey
后我期望的输出是例如:在第 0 行中,单词 This
被使用了 1 次等...
[(0, ('This', 1, 'is', 1, 'the', 1, ...)), ...]
找出每行单词出现的次数并将它们组合在一起:
- 映射RDD中的元素,使得行号和单词成为键(即,),(0,('This',1))成为((0,'This' ), 1)
- 通过对出现的次数求和来减少第 1 步中的 RDD
- 重新映射第 2 步的结果,将行号作为键
- 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))]
"""
我已经在 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就可以得到频率了
我找不到解决这个问题的方法。使用 aggregateByKey
或 reduceByKey
后我期望的输出是例如:在第 0 行中,单词 This
被使用了 1 次等...
[(0, ('This', 1, 'is', 1, 'the', 1, ...)), ...]
找出每行单词出现的次数并将它们组合在一起:
- 映射RDD中的元素,使得行号和单词成为键(即,),(0,('This',1))成为((0,'This' ), 1)
- 通过对出现的次数求和来减少第 1 步中的 RDD
- 重新映射第 2 步的结果,将行号作为键
- 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))]
"""