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

jvidinwx  于 2023-01-05  发布在  Apache
关注(0)|答案(1)|浏览(151)

我正在使用pySpark来计算一个令牌化RDD中的元素,这是其中一个元素:

('b00004tkvy', ['noah', 'ark', 'activity', 'center', 'jewel', 'case', 'ages', '3', '8', 'victory', 'multimedia'])

我必须计算完整RDD中的元素数量,它只返回一个值,作为一个元素列表。
有一个函数可以做到这一点。我使用了下面的代码(当然它可以更改,但它必须保持在一行中,即返回行):

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.

在这一点上,我不知道如何使用结果作为一个值(整数),而不是作为一个列表。

167
58    
There are 225 tokens.

我希望有人能帮助我。
先谢谢你。

rfbsl7qr

rfbsl7qr1#

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中的值时,这个值会返回一个列表。2加上[0]会给予你这个列表中的第零个项目,你可以从中得到你的总数。
但你真的不需要

x:(1,

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

相关问题