【发布时间】:2015-09-09 22:59:01
【问题描述】:
我正在使用 pySpark 对标记化 RDD 中的元素进行计数。 这是元素之一:
('b00004tkvy', ['noah', 'ark', 'activity', 'center', 'jewel', 'case', 'ages', '3', '8', 'victory', 'multimedia'])
我必须计算完整 RDD 中的元素数量。它只返回一个值,作为单个元素列表。
有一个函数可以做到这一点。我使用了这段代码(当然可以更改,但必须保留在一行,即 Return 行):
def countTokens(RDD):
return RDD.map(lambda x :(1,len(x[1]))).reduceByKey(lambda x,y:x+y).map(lambda x: int(x[1])).collect()
print countTokens(aRecToToken)
print countTokens(bRecToToken)
totalTokens = countTokens(aRecToToken) + countTokens(bRecToToken)
结果是:
[167]
[58]
There are [167, 58] tokens.
此时我不知道如何将结果用作值(整数)而不是列表。 我的目标 id 得到
167
58
There are 225 tokens.
我希望有人可以帮助我。
提前谢谢你。
【问题讨论】:
-
所有这些
lambdas 使您的代码不可读。您的实际问题很容易解决,但如果您编写更明显/可维护的代码,您可能会理解它。 -
所以在第一张地图中,您松开了钥匙。这让我想知道你为什么要使用 reduceByKey 而不是 reduce。
-
这可能是 edx 板本身的最佳答案.....
-
非常感谢你们。你的提示帮助我解决了这个问题。 @Justin,在 edx 板上不喜欢代码。
标签: python apache-spark tokenize rdd pyspark