如何在Pyspark工作中的回调之间共享变量?

时间:2016-10-19 20:09:17

标签: apache-spark machine-learning pyspark spark-streaming

我试过

  1. 全局变量 - 此方法有效。
  2. 使用额外的成员变量对SparkContext进行子类化,然后通过我的回调中的rdd.context()。getMyData()获取额外的成员变量 - 此方法失败,并且我的子类类型的错误不可调用。
  3. 我也是Spark的新手,我想知道是否有任何方法可以做到比全局变量更好的方法?或者,如果Spark提供的假设方式我已经失踪了?我共享的数据是每个RDD中样本的单独缓冲区,因为我正在提供样本的快速傅里叶变换算法需要特定的样本数,因此我将缓冲样本,直到缓冲区大小达到此特定计数。任何见解和建议都深表赞赏!!

    我的代码示例:

    limit = 64
    buffer=[]
    def processSamples(rdd):
         global limit
         global buffer
         lines = rdd.collect()
         for (k,v) in lines:
           if len(buffer) == limit:
               FFT(buffer)
               del buffer[:]
           buffer.append(v)
    if __name__ == "__main__":
         sc = SparkContext()
         ssc = StreamingContext(sc, 2)
         topic = "topic1"
         ks = KafkaUtils.createDirectStream(ssc, [topic], {"bootstrap.servers": "kafka:9092"})
         ks.foreachRDD(processSamples)
         ssc.start()
         ssc.awaitTermination()
    

0 个答案:

没有答案