Arn*_*nab 5 python cython pyspark
我最近想Cython与 Spark一起使用,为此我遵循了以下参考。
我写了下面提到的程序,但我得到了一个:
TypeError:
fib_mapper_cython() takes exactly 1 argument (0 given)
Run Code Online (Sandbox Code Playgroud)
def spark_cython(module, method):
def wrapped(*args, **kwargs):
global cython_function_
try:
return cython_function_(*args, **kwargs)
except:
import pyximport
pyximport.install()
cython_function_ = getattr(__import__(module), method)
return cython_function_(*args, **kwargs)
return wrapped()
Run Code Online (Sandbox Code Playgroud)
def fib_mapper_cython(n):
'''
Return the first fibonnaci number > n.
'''
cdef int a = 0
cdef int b = 0
cdef int j = int(n)
while b<j:
a, b = b, a+b
return b, 1
Run Code Online (Sandbox Code Playgroud)
from spark_tools import spark_cython
import pyximport
import os
from pyspark import SparkContext
from pyspark import SparkConf
pyximport.install()
os.environ["SPARK_HOME"] = "/home/spark-1.6.0"
conf = (SparkConf().setMaster('local').setAppName('Fibo'))
sc = SparkContext()
sc.addPyFile('file:///home/Cythonize/fib.pyx')
sc.addPyFile('file:///home/Cythonize/spark_tools.py')
lines = sc.textFile('file:///home/Cythonize/nums.txt')
mapper = spark_cython('fib', 'fib_mapper_cython')
fib_frequency = lines.map(mapper).reduceByKey(lambda a, b: a+b).collect()
print fib_frequency
Run Code Online (Sandbox Code Playgroud)
TypeError每当我运行程序时,我都会得到一个。有任何想法吗?
这不是Cython问题PySpark,不幸的是您在 的定义期间添加了额外的函数调用spark_cython。具体来说,包装调用的函数cython_function在返回时不带参数被调用:
return wrapped() # call made, no args supplied.
Run Code Online (Sandbox Code Playgroud)
因此,当您执行此调用时,您将不会返回包装的函数。你所做的就是wrapped用 no*args或来调用**kwargs。wrapped然后fib_mapper_cython不带参数调用(因为*args, **kwargs未提供),因此TypeError.
你应该:
return wrapped
Run Code Online (Sandbox Code Playgroud)
这个问题应该不再存在。
| 归档时间: |
|
| 查看次数: |
2719 次 |
| 最近记录: |