Spark 上的映射函数返回 'NoneType'
Map Function on Spark returning 'NoneType'
我在 Apache Spark 上 Python 到 运行 中编写了以下代码:
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()
它产生错误:
TypeError: unsupported operand type(s) for +: 'NoneType' and 'NoneType
generate_kdmer 函数应该是 return 一个列表,并且由 map return 编辑的列表会在 reduce 中附加到一个列表中,但我不知道为什么它保持 returning 'None'。我试图在函数内部打印一些东西,但它在控制台上什么也没显示,这个函数真的在执行吗?有没有更好的方法来传递函数以在 Spark 上进行映射?
问题是 res.sort()
return 是 NoneType
。您想进行排序,然后 return res
res.sort()
return res
您可以将其直接插入 python fiddle 以了解我在说什么:
k = 1
d = 1
seq = "This is a string"
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]])
print(res.sort())
print(res)
我在 Apache Spark 上 Python 到 运行 中编写了以下代码:
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()
它产生错误:
TypeError: unsupported operand type(s) for +: 'NoneType' and 'NoneType
generate_kdmer 函数应该是 return 一个列表,并且由 map return 编辑的列表会在 reduce 中附加到一个列表中,但我不知道为什么它保持 returning 'None'。我试图在函数内部打印一些东西,但它在控制台上什么也没显示,这个函数真的在执行吗?有没有更好的方法来传递函数以在 Spark 上进行映射?
问题是 res.sort()
return 是 NoneType
。您想进行排序,然后 return res
res.sort()
return res
您可以将其直接插入 python fiddle 以了解我在说什么:
k = 1
d = 1
seq = "This is a string"
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]])
print(res.sort())
print(res)