在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)
应该更合适。
请告诉我我是否正确。
答案 0 :(得分:0)
collect
是解决当前实现的某些问题的解决方法。 According to Michael Armbrust:
我们如何覆盖默认查询规划器以将其替换为增量规划器,这有点奇怪。因此,调用任何更改查询计划的操作(例如LIMIT)将导致它恢复到批处理计划程序并返回错误的答案。我们应该在最终确定Sink API之前解决这个问题。
此外:
paralelize
只是为了回到一致的DataFrame
API。