scala中的Spark懒惰异步计数

时间:2016-06-05 17:58:51

标签: scala asynchronous apache-spark count

我目前正在构建Spark应用程序,并且我想记录来自我的中间RDD的一些统计信息。我只需要在转换的不同步骤中RDD的大小。

转换是线性的,因此我不需要缓存任何内容,除了调用.count()(它不需要准确也不需要同步)。

我可以使用countAsync变为异步:

val rawData = sc.textFile(path)
val (values, malformedRows) = parse(rawData)
values.countAsync.onComplete(size => logger.info(s"${malformedRows.count} malformed rows while parsing ${path} (${size} successfully parsed)"))
val result = values
    .map(operator)
    .filter(predicate)
result.countAsync.onComplete(size => logger.info(s"${size} final rows"))
result.saveAsTextFile(output)

但是,我的理解是countAsync会触发一个新动作(如count所做)。由于我的RDD最终将被计算(通过最后saveAsTextFile动作),我想知道是否有可能利用最后一个动作来记录统计数据而不创建新动作。

有没有办法在不触发新动作的情况下进行近似异步计数?换句话说,有一个懒惰的count()

0 个答案:

没有答案