Pyspark-将控制转移到Spark会话之外(sc)

Pyspark-将控制转移到Spark会话之外(sc),pyspark,spark-streaming,dstream,Pyspark,Spark Streaming,Dstream,这是一个后续问题 记录一天、一小时内收到的错误消息/警告消息的数量——如何设计作业 我所尝试的: from __future__ import print_function import sys from pyspark import SparkContext from pyspark.streaming import StreamingContext def counts(): counter += 1 print(counte

这是一个后续问题

记录一天、一小时内收到的错误消息/警告消息的数量——如何设计作业

我所尝试的:

from __future__ import print_function

import sys

from pyspark import SparkContext
from pyspark.streaming import StreamingContext


    def counts():
            counter += 1
            print(counter.value)

    if __name__ == "__main__":

            if len(sys.argv) != 3:
                    print("Usage: network_wordcount.py <hostname> <port>", file=sys.stderr)
            exit(-1)


            sc = SparkContext(appName="PythonStreamingNetworkWordCount")
            ssc = StreamingContext(sc, 5)
            counter = sc.accumulator(0)

            lines = ssc.socketTextStream(sys.argv[1], int(sys.argv[2]))
            errors = lines.filter(lambda l: "error" in l.lower())
            errors.foreachRDD(lambda e : e.foreach(counts))
            errors.pprint()

            ssc.start()
            ssc.awaitTermination()
发送或打印词典的最后一部分要求切换出spark流媒体上下文-有人能解释一下这个概念吗

打印不起作用

我建议您阅读Spark文档的第一部分。我认为大致上你想要的是这样的:

def _process(iter):
    for item in iter:
        print item

lines = ssc.socketTextStream(sys.argv[1], int(sys.argv[2]))
errors = lines.filter(lambda l: "error" in l.lower())
errors.foreachRDD(lambda e : e.foreachPartition(_process))
这将使您的调用
print
起作用(但值得注意的是,print语句将在worker而不是驱动程序上执行,因此如果您在集群上运行此代码,您将只在worker日志上看到它)

但是,它不会解决您的第二个问题:

如何保存状态


为此,请看一看。

是打印项目还是打印(项目)-出于某种原因,当我在程序中的任何地方使用“打印”时,它会显示任何错误-更像是没有任何调试信息/错误的“崩溃”
def _process(iter):
    for item in iter:
        print item

lines = ssc.socketTextStream(sys.argv[1], int(sys.argv[2]))
errors = lines.filter(lambda l: "error" in l.lower())
errors.foreachRDD(lambda e : e.foreachPartition(_process))