pySpark 将列表或 RDD 元素转换为值(int)

问题描述 投票:0回答:1

我正在使用 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.

我希望有人能帮助我。

提前谢谢您。

python apache-spark tokenize rdd pyspark
1个回答
0
投票
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]

当您需要 225 中的值时,该值将返回一个列表。添加 [0] 将为您提供列表中的第零项,您可以从中获取总计。

但是你真的不需要

x:(1, 

如果你所做的一切都是总计,你只需要 len(x[1]) 然后像你所做的那样 reduce

© www.soinside.com 2019 - 2024. All rights reserved.