【问题标题】:Spark tasks execution seriesSpark任务执行系列
【发布时间】:2017-09-11 12:51:21
【问题描述】:

我正在驱动程序上运行 Spark 应用程序。

简单如下

val count=0; 
val test_dataframe =//extrenal frame
count=test.count();
println("The count of frame is " + count);

我的问题是,如果第三行总是在计算帧数后执行。驱动程序是否可以在执行数据帧及其计数之前先运行println 命令?

【问题讨论】:

  • 如何在不对数据帧执行计数操作的情况下打印计数?
  • 计数最初声明为零。
  • 我看到了。然而,这对我来说只打印零没有任何意义。如果你把 println 语句放在 count=test.count() 这一行之前呢?
  • 我的问题是 println 可能在不处理数据帧然后打印 0 的情况下运行?
  • 我认为您的意思不是test.count,而是test_dataframe.count。因为您声明的数据框名称是 test_dataframe 而不是 test

标签: apache-spark


【解决方案1】:

不,驱动程序不可能在上述代码中的test.count() 之前执行 println,因为 count 是一个终端操作,调用终端操作会强制 spark 在继续之前执行计算。

如果你想要异步计数,那么这里有一个可以工作的代码 sn-p:

var future = test.rdd.countAsync
println("The count before future evaluation: " + count)
count = future.get
println("The count after future evaluation: " + count)

请注意,countAsync 操作不能直接在数据帧上使用。可以在RDD上执行。

【讨论】:

  • 我觉得不是,“test.count”本质上是一个异步操作!
  • count 默认是同步动作。 spark支持几个异步操作。如果你想要异步行为,那么你需要在你的代码中明确提及。检查这个类:spark.apache.org/docs/2.2.0/api/java/index.html?org/apache/…
  • @Luckyukee 上述解释是否消除了您的疑问?此外,我还使用代码 sn-p 更新了答案以进行异步计数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-10
  • 1970-01-01
  • 2012-10-07
  • 1970-01-01
  • 2017-02-28
  • 1970-01-01
相关资源
最近更新 更多