我是SparkR的新手,所以想问一下SparkR用什么jar来解析R语法
答案 0 :(得分:0)
我希望我能正确理解你,并且你的假设是R代码将被翻译成Java代码。所以我的简短回答是SparkR不使用jar来解析R语法。
更长的解释:
好吧,SparkR是用R编写的,当你创建sparkR.session()
时,将创建一个本地Spark驱动程序JVM,并建立R实例和JVM之间的套接字连接。 SparkR函数或多或少是用Scala编写的Spark SQL方法的包装器,它存在于Spark端,并将使用套接字连接调用。函数参数或整个函数将以自定义格式序列化,发送到JVM,最终Spark执行器将在Spark集群使用的R实例中执行(反序列化的)R代码。
序列化和反序列化代码位于Spark发行版的/R/pkg/R/serialize.R
和/R/pkg/R/deserialize.R
中。 R/pkg/inst/worker/worker.R
执行Spark群集中的R代码。
可在此处找到包含更多详细信息的旧架构概述: https://cs.stanford.edu/~matei/papers/2016/sigmod_sparkr.pdf
我们在SparkR JVM后端支持两种RPC: 方法调用和创建新对象。方法调用是 使用对现有Java对象(或类的名称)的引用来调用 静态方法)和要传递给方法的参数列表。 参数是使用我们的自定义线格式序列化的 然后在JVM端反序列化。然后我们使用Java反射 调用适当的方法。为了创建对象,我们使用了 特殊方法名称init然后类似地调用相应的 构造函数基于提供的参数。最后,我们使用新的R. class'jobj',指的是后端中存在的Java对象。 这些引用在Java端进行跟踪并自动进行 当它们离开R侧的范围时收集的垃圾。