Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在同一主机下的Java和R应用程序之间共享SparkContext_Java_R_Apache Spark_Dataframe_Apache Spark Sql - Fatal编程技术网

在同一主机下的Java和R应用程序之间共享SparkContext

在同一主机下的Java和R应用程序之间共享SparkContext,java,r,apache-spark,dataframe,apache-spark-sql,Java,R,Apache Spark,Dataframe,Apache Spark Sql,这里是设置 目前我已经初始化了两个Spark应用程序。我需要在它们之间传递数据(最好是通过共享的sparkcontext/sqlcontext,这样我就可以查询临时表)。我目前使用拼花文件进行数据帧传输,但是否有其他方法 MasterURL指向同一个SparkMaster 通过端子启动火花: /opt/spark/sbin/start-master.sh; /opt/spark/sbin/start-slave.sh spark://`hostname`:7077 Java应用程序设置: J

这里是设置

目前我已经初始化了两个Spark应用程序。我需要在它们之间传递数据(最好是通过共享的sparkcontext/sqlcontext,这样我就可以查询临时表)。我目前使用拼花文件进行数据帧传输,但是否有其他方法

MasterURL指向同一个SparkMaster

通过端子启动火花:

/opt/spark/sbin/start-master.sh; 
/opt/spark/sbin/start-slave.sh spark://`hostname`:7077
Java应用程序设置:

JavaSparkContext context = new JavaSparkContext(conf);
//conf = setMaster(MasterURL), 6G memory, and 4 cores.
SQLContext sqlContext = new SQLContext(parentContext.sc());
然后我注册一个现有的帧

//existing dataframe to temptable
df.registerTempTable("table");

斯巴克

sc <- sparkR.init(master='MasterURL', sparkEnvir=list(spark.executor.memory='6G', spark.cores.max='4')
sqlContext <- sparkRSQL.init(sc)

# attempt to get temptable
df <- sql(sqlContext, "SELECT * FROM table"); # throws the error

sc据我所知,考虑到您当前的配置,这是不可能的。使用registerEmptable创建的表绑定到特定的
SQLContext
,该上下文已用于创建相应的
DataFrame
。即使您的Java和SparkR应用程序使用相同的主应用程序,它们的驱动程序也运行在不同的JVM上,不能共享单个
SQLContext

有一些工具,比如ApacheZeppelin,它们采用不同的方法,使用一个暴露于各个后端的
SQLContext
(和
SparkContext
)。通过这种方式,您可以使用Scala等注册表并从Python中读取它。有。你可以检查它是如何工作的