除了输出/连接之外,foreachRDD foreachPartition在pyspark流媒体优势中的使用

时间:2016-07-09 16:35:25

标签: python apache-spark pyspark

我的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来减少数据库连接之外 - 还有速度优势吗?

0 个答案:

没有答案