我是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))
答案 0 :(得分:0)
答案是mapPartitionwithIndex。索引有助于识别每个任务,索引的迭代器有助于处理任务中的事件。