Spark返回的映射函数的'NoneType'

2024-10-03 17:19:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我用Python编写了以下代码以在Apache Spark上运行:

import sys
from pyspark import SparkContext

def generate_kdmer(seq):
    res = []
    beg2, end2 = k+d, k+d+k
    last = len(seq) - end2 + 1
    for i in range(last):
        res.append([seq[i:i+k], seq[i+beg2:i+end2]])
    return res.sort()

if __name__ == "__main__":
    if len(sys.argv) != 4:
        print("Usage: kdmer <file> <k> <d>, file=sys.stderr")
        exit(-1)
    sc = SparkContext(appName="KDmerGenerator")
    k, d = int(sys.argv[2]), int(sys.argv[3])
    lines = sc.textFile(sys.argv[1])
    kdmer = lines.map(generate_kdmer).reduce(lambda a, b: a + b)
    output = kdmer.collect()
    for i in output:
        print(str(i[0]) + ' | ' + str(i[1]))
    sc.stop()

它会产生错误:

^{pr2}$

generate-kdmer函数应该返回一个列表,映射返回的列表将被附加到reduce中的一个列表中,但是我不知道它为什么总是返回“None”。我试图在函数内部打印一些内容,但是控制台上什么也没有显示,这个函数真的在执行吗?有没有更好的方法传递函数映射到Spark上?在


Tags: 函数import列表sysresseqgeneratespark
1条回答
网友
1楼 · 发布于 2024-10-03 17:19:59

问题是res.sort()返回一个NoneType。您想进行排序,然后返回res

res.sort()
return res

您可以直接将其插入python fiddle以查看我在说什么:

^{pr2}$

相关问题 更多 >