Gia*_*oli 1 python arrays pyspark
我在数据框中有一个字符串数组(称为“单词”)。
如果我在 PySpark 控制台上输入“words”,我会得到:
DataFrame[words: array<string>]
Run Code Online (Sandbox Code Playgroud)
每个元素均以逗号分隔。现在,给定这个数组,我想以这种方式找出它们的频率:
count = words.flatMap(lambda line: line.split(',')).map(lambda word: (word, 1)).reduceByKey(lambda a, b: a + b)
Run Code Online (Sandbox Code Playgroud)
现在,当我尝试打印结果(使用 .first、.collect、.take(n))时,出现以下错误:
PythonRDD[292] at RDD at PythonRDD.scala:43
Run Code Online (Sandbox Code Playgroud)
是否可以使用带有逗号的 split 函数来计算单词频率?或者,也许还有其他方法?
单词列已经是一个数组,所以你不能拆分它,也许你的意思是这个?
words.show()
#+------------------+
#| words|
#+------------------+
#|[, ", an, animate]|
#|[, ", battlefield]|
#| [, ", be, gentle]|
#+------------------+
words.rdd.flatMap(lambda a: [(w,1) for w in a.words]).reduceByKey(lambda a,b: a+b).collect()
# [(u'', 3), (u'gentle', 1), (u'battlefield', 1), (u'be', 1), (u'animate', 1), (u'"', 3), (u'an', 1)]
Run Code Online (Sandbox Code Playgroud)
或者,如果结果可以适合驱动程序内存,则countByValue在展平单词列后使用更简单的方法:
words.rdd.flatMap(lambda a: a.words).countByValue()
# defaultdict(<type 'int'>, {u'': 3, u'battlefield': 1, u'"': 3, u'be': 1, u'an': 1, u'gentle': 1, u'animate': 1})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3563 次 |
| 最近记录: |