我的Apache spark
流媒体代码在Dstream
上运行,如下所示。我的问题是使用foreachRDD
是否有任何价值,只有在驱动程序上才能理解。当然,就像文档一样,也许对于打开连接不太频繁可能是有用的。但是usecase是非常大规模的并行进程 - 每个进程都会写入db表。我感谢我可以使用foreachPartition
来减少数据库连接的数量,但是我在这里缺少什么?
sc = SparkContext("local[2]", "test")
ssc = StreamingContext(sc, 1)
lines = ssc.socketTextStream("localhost", 9999)
line_split = lines.flatMap(lambda line: line.split("\n"))
process = line_split.flatMap(lambda record: ProcessA(record)).map(lambda tran: ProcessB(tran))
此处ProcessA
将有效地展开传入的数据结构,然后ProcessB
将处理这些展开的结构。目前,每个ProcessB
调用都会进行数据库连接 - 我会考虑重写这些调用以避免数据库负载。
除了使用foreachPartition
来减少数据库连接之外 - 还有速度优势吗?