Python pySpark将列表或RDD元素转换为值(int)
我正在使用pySpark计算标记化RDD中的元素。 这是其中一个要素:Python pySpark将列表或RDD元素转换为值(int),python,apache-spark,tokenize,rdd,pyspark,Python,Apache Spark,Tokenize,Rdd,Pyspark,我正在使用pySpark计算标记化RDD中的元素。 这是其中一个要素: ('b00004tkvy', ['noah', 'ark', 'activity', 'center', 'jewel', 'case', 'ages', '3', '8', 'victory', 'multimedia']) 我必须计算完整RDD中的元素数。它只返回一个值,作为单个元素列表 有一个函数可以做到这一点。我使用了这段代码(当然可以更改,但必须保留在一行,即返回行): 结果是: [167] [58] There
('b00004tkvy', ['noah', 'ark', 'activity', 'center', 'jewel', 'case', 'ages', '3', '8', 'victory', 'multimedia'])
我必须计算完整RDD中的元素数。它只返回一个值,作为单个元素列表
有一个函数可以做到这一点。我使用了这段代码(当然可以更改,但必须保留在一行,即返回行):
结果是:
[167]
[58]
There are [167, 58] tokens.
此时,我不知道如何将结果作为值(整数)而不是列表使用。
我的目标是
167
58
There are 225 tokens.
我希望有人能帮助我
先谢谢你
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()[0]
当您需要此字段中的值时,该值将返回一个列表。添加[0]将为您提供列表中的第0项,您可以从中获取总计
但你真的不需要
x:(1,
如果你所做的都是合计,你只需要len(x[1]),然后像你所做的那样减少。所有这些lambdas使你的代码不可读。您的实际问题很容易解决,但如果您编写的代码更明显/可维护,您可能会理解它。这让我想知道为什么你们要做reduceByKey而不是reduce。这可能是edx董事会本身最好的答案……非常感谢你们两位。你的提示帮助我解决了这一问题@贾斯汀,在edx板上,我不喜欢代码。
x:(1,