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