Pyspark 如何为每个任务(分区)执行一些函数,以及为分区中的每个元素执行一些函数?

Pyspark 如何为每个任务(分区)执行一些函数,以及为分区中的每个元素执行一些函数?,pyspark,Pyspark,我是PySpark编程新手,如果我的术语不正确,请耐心等待。我有一个带有共享文件系统的5节点集群。pyspark流工作正常 我想运行多个任务,每个任务包含“x”元素。每个任务都应该创建一个文件(在init函数中定义),并将每个元素上执行的值(通过push_track_info)写入相应的文件 我用foreach和foreachpartition进行了尝试,但到目前为止,我只能编写为一个元素创建一个文件的代码,而我的要求是每个任务一个文件,但任务中的每个元素都有一个操作。我该怎么做呢 class

我是PySpark编程新手,如果我的术语不正确,请耐心等待。我有一个带有共享文件系统的5节点集群。pyspark流工作正常

我想运行多个任务,每个任务包含“x”元素。每个任务都应该创建一个文件(在init函数中定义),并将每个元素上执行的值(通过push_track_info)写入相应的文件

我用foreach和foreachpartition进行了尝试,但到目前为止,我只能编写为一个元素创建一个文件的代码,而我的要求是每个任务一个文件,但任务中的每个元素都有一个操作。我该怎么做呢

class MyClass:
def __init__(self): 
    self.track = SparkCheck()       
    self.cluster_output_tree ='test.root'
    self.f1 = TFile(self.cluster_output_tree, 'RECREATE')
    self.tree_tracks = TTree('tracks_spark', 'Tree containing Tracks found through clustering')
    self.branch = self.tree_tracks.Branch('Events_Spark', 'SparkCheck', AddressOf(self.track), 32000, 99)

def push_tracks_info(self, i):
    self.check = MyClass()
    self.track.event = 1 +i
    self.track.timestamp = 1000+i
    self.tree_tracks.Fill()
    self.tree_tracks.Write()
    return self.track

sc = SparkContext("spark://ksf141i:7077", "Test App")
sc.addPyFile('myclass.py')
sc.addPyFile('settings.py')
check = MyClass()
rdd5 = sc.parallelize(range(100))
rdd5.foreach(lambda entry: check.push_tracks_info(entry))

答案是mapPartitionwithIndex。索引有助于识别每个任务,索引的迭代器有助于处理任务中的事件。

能否添加更多上下文?你是如何编写写函数的?你所说的任务是什么意思,它们是你正在迭代的100个任务吗?请检查一下tasks,我指的是并行化中的numSlices(c,numSlices=None)。在我的例子中,它将是sc.parallelize(范围(100),10)。对于10个切片中的每一个,我想创建一个文件,因此总共有10个文件,每个文件包含10个条目。Fill()、Write()来自我要导入Python的外部库,但它在独立模式下也可以在spark模式下工作。问题是现在,我有100个文件,每个文件有一个条目。