与Scala语言相比,Python有其独特的优势和广泛的应用,python调用接口,因此Spark也推出了PySpark,它在框架上提供了一个使用Python语言的接口,python接收post请求接口为数据科学家使用框架提供了方便。
众所周知,Spark框架主要由Scala语言实现,它还包含少量的Java代码。Spark面向用户的编程接口也是Scala。然而,Python在数据科学领域一直占据着重要的地位。仍然有大量的数据工程师使用各种Python数据处理和科学计算库,如numpy、熊猫、scikit-learn等。与此同时,Python的入门门槛明显低于Scala。
出于这个原因,Spark已经推出了PySpark,它在Spark框架上提供了一组Python接口,以方便数据科学家。本文主要从源代码实现层面分析了PySpark的实现原理,包括以下几个方面:
PySpark的多进程架构;
Python调用Java和Scala接口;
Python驱动程序RDD,SQL接口;
执行器端进程间通信和序列化;
熊猫UDF;
总结。
1.PySpark的多进程架构
PySpark使用多进程架构,其中Python和JVM进程是分开的。Python和JVM进程同时出现在驱动程序和执行器上。当通过spark-submit提交PySpark Python脚本时,驱动程序端会直接运行Python脚本并启动JVM从蟒蛇身上。然而,Python中调用的RDD或数据框架操作将通过Py4j被调用到Java的接口。
在遗嘱执行人方面,恰好相反。驱动程序首先启动JVM的执行器进程,python自动写论文然后在JVM中启动Python的子进程来执行Python的UDF。套接字用于进程间通信。