Pyspark:当我打印累加器时,其值为零

时间:2019-02-08 14:42:51

标签: python apache-spark pyspark

下面是一个示例pyspark代码片段,我尝试在其中检查(作为健全性检查)“转换”后处理了多少订单。 因此,我试图定义一个累加器并将其用作获取“已处理订单数”的计数器。

    orders=inputpath + "/orders" # Accepting and creating  the "full input path" for input file
    counter=sc.accumulator(0) #defining accumulator

    def OrderTuples(order): #defining a function to incorporate "counter increment" for every records filtered out from filter transformation to the map transformation
        counter.add(1) 
        return (int(order.split(",")[0]),1)

     ordersFiltered = sc.textFile(orders). \
        filter(lambda order : month in order.split(",")[1]). \
        map(lambda order : OrderTuples(order)) # Calling the  function here
    print(f"NO OF ORDERS PROCESSED:{counter}") # printing the accumulator final value here

但是作为最终输出,我仍然得到零值。我要去哪里错了。我是第一次使用蓄电池。 sc.textFile(orders)默认具有2个分区,我正在使用--num-executors 2(13个节点群集) 在这里欣赏援助之手:)

1 个答案:

答案 0 :(得分:1)

ordersFiltered需要在实际评估过滤器lambda之前执行一项操作(例如收集)