Python 在Spark中导入自定义累加器类型
我正试图使用一个自定义的累加器类。如果我在本地定义该类,这是可行的,但是当我尝试在另一个模块中定义它并使用Python 在Spark中导入自定义累加器类型,python,apache-spark,import,pyspark,accumulator,Python,Apache Spark,Import,Pyspark,Accumulator,我正试图使用一个自定义的累加器类。如果我在本地定义该类,这是可行的,但是当我尝试在另一个模块中定义它并使用sc.addPyFile导入文件时,我会得到一个ImportError 在导入rdd.foreach中的helper函数时,我遇到了相同的问题,我可以通过在foreach的函数(下面的示例)中执行import来解决这个问题。然而,同样的修复对自定义累加器不起作用(我也不希望它真的起作用) tl;dr:导入自定义累加器类的正确方法是什么 扩展/累加器.py: class ArrayAccumu
sc.addPyFile
导入文件时,我会得到一个ImportError
在导入rdd.foreach
中的helper函数时,我遇到了相同的问题,我可以通过在foreach的函数(下面的示例)中执行import
来解决这个问题。然而,同样的修复对自定义累加器不起作用(我也不希望它真的起作用)
tl;dr:导入自定义累加器类的正确方法是什么
扩展/累加器.py:
class ArrayAccumulatorParam(pyspark.AccumulatorParam):
def zero(self, initialValue):
return numpy.zeros(initialValue.shape)
def addInPlace(self, a, b):
a += b
return a
run/count.py:
from extensions.accumulators import ArrayAccumulatorParam
def main(sc):
sc.addPyFile(LIBRARY_PATH + '/import_/logs.py')
sc.addPyFile(LIBRARY_PATH + '/extensions/accumulators.py')
rdd = sc.textFile(LOGS_PATH)
accum = sc.accumulator(numpy.zeros(DIMENSIONS), ArrayAccumulatorParam())
def count(row)
import logs # This 'internal import' seems to be required to avoid ImportError for the 'logs' module
from extensions.accumulators import ArrayAccumulatorParam # Error is thrown both with and without this line
val = logs.parse(row)
accum.add(val)
rdd.foreach(count) # Throws ImportError: No module named extensions.accumulators
if __name__ == '__main__':
conf = pyspark.SparkConf().setAppName('SOME_COUNT_JOB')
sc = pyspark.SparkContext(conf=conf)
main(sc)
错误:
ImportError: No module named extensions.accumulators
对于自定义蓄能器使用(pyspark.蓄能器.蓄能器参数)对于自定义蓄能器使用(pyspark.蓄能器.蓄能器参数)