如何为每个任务(分区)执行某些功能,为分区中的每个元素执行某些功能?

时间:2020-10-28 19:53:14

标签: pyspark

我是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))

1 个答案:

答案 0 :(得分:0)

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

相关问题