通过py4j第三方工具,将python语言映射到JVM的字节码程序
(1)在Driver端,通过【Py4j】实现在Python中调用Java的方法,即将用户写的PySpark程序”映射”到【JVM】中,例如,用户在PySpark中实例化一个Python的SparkContext对象,最终会在JVM中实例化Scala的【SparkContext】对象;
(2)在Executor端,则【不需要】借助Py4j,因为Executor端运行的Task逻辑是由【Driver】发过来的,那是序列化后的字节码,虽然里面可能包含有用户定义的Python函数或Lambda表达式,Py4j并不能实现在Java里调用Python的方法,为了能在Executor端运行用户定义的Python函数或Lambda表达式,则需要为每个Task单独启一个【python】进程,通过socket通信方式将Python函数或Lambda表达式发给Python进程执行。