例如,我有以下代码:
public static void main(String[] args) {
RestController restController = new RestController();
SparkSession sparkSession = SparkSession
.builder()
.appName("test example")
.getOrCreate();
Dataset<Row> csvFileDF = sparkSession.read().csv("test_csv");
// code in task //
restController.sendFile();
// __________//
csvFileDF.write().parquet("test_parquet");
}
字符串
方法restController.sendFile()
不是在spark上下文中执行的,与读csv和写parquet操作相反。
罐运行人:
spark-submit --jar main.jar
型
我是否正确理解了restController.sendFile()
在驱动程序上执行?
1条答案
按热度按时间2nc8po8w1#
一般来说,在Spark中,在执行器上进行的计算是在分布式数据(RDD,DataFrames,Datasets)上执行的操作/转换。其余部分在驱动程序中进行,因为计算不是分布式的。
所以在你的例子中,它确实看起来像
restController.sendFile()
只发生在驱动程序上,但我不能肯定,因为我不知道这个方法是做什么的。让我们举一个非常简单的例子:
字符串
在这里,您可以看到我们:
df2
嵌套框架myList2
列表当查看该应用程序的spark历史服务器时,我们看到:
x1c 0d1x的数据
在我们的Spark上下文中,只发生了嵌套框架操作,其余的都是在驱动程序上进行的正常的、非分布式的计算。