为什么spark2.2控制台接收器需要调用并行化功能?

时间:2017-08-17 08:52:50

标签: apache-spark

在spark2.2控制台接收器中,我们可以看到函数addBatch的设计如下。

// scalastyle:off println
data.sparkSession.createDataFrame(
    data.sparkSession.sparkContext.parallelize(data.collect()), data.schema)
    .show(numRowsToShow, isTruncated)

但我想知道为什么我们不这样做:

data.show(numRowsToShow, isTruncated)

我认为使用parallelize将运行2个工作,这意味着它将花费更多的资源和时间。所以我认为data.show(numRowsToShow, isTruncated)应该更合适。 请告诉我我是否正确。

1 个答案:

答案 0 :(得分:0)

collect是解决当前实现的某些问题的解决方法。 According to Michael Armbrust

  

我们如何覆盖默认查询规划器以将其替换为增量规划器,这有点奇怪。因此,调用任何更改查询计划的操作(例如LIMIT)将导致它恢复到批处理计划程序并返回错误的答案。我们应该在最终确定Sink API之前解决这个问题。

此外:

paralelize只是为了回到一致的DataFrame API。