在 Java 和同一 Master 下的 R Apps 之间共享 SparkContext
Share SparkContext between Java and R Apps under the same Master
这是设置。
目前我已经初始化了两个 Spark 应用程序。我需要在它们之间传递数据(最好通过共享 sparkcontext/sqlcontext,这样我就可以查询一个临时文件 table)。我目前使用 Parquet Files 进行数据帧传输,但是否可以使用其他任何方式?
MasterURL指向同一个SparkMaster
通过终端启动 Spark:
/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");
和
SparkR
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
据我所知,鉴于您当前的配置,这是不可能的。使用 registerTempTable
创建的表绑定到已用于创建相应 DataFrame
的特定 SQLContext
。即使您的 Java 和 SparkR 应用程序在不同的 JVM 上使用相同的 master 它们的驱动程序 运行 并且不能共享单个 SQLContext
.
有一些工具,例如 Apache Zeppelin,采用不同的方法,将单个 SQLContext
(和 SparkContext
)暴露给各个后端。这样你就可以注册 table 使用例如 Scala 并从 Python 读取它。有a fork of Zeppelin which provides some support for SparkR and R. You can check how it starts and interacts R backend.
这是设置。
目前我已经初始化了两个 Spark 应用程序。我需要在它们之间传递数据(最好通过共享 sparkcontext/sqlcontext,这样我就可以查询一个临时文件 table)。我目前使用 Parquet Files 进行数据帧传输,但是否可以使用其他任何方式?
MasterURL指向同一个SparkMaster
通过终端启动 Spark:
/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");
和
SparkR
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
据我所知,鉴于您当前的配置,这是不可能的。使用 registerTempTable
创建的表绑定到已用于创建相应 DataFrame
的特定 SQLContext
。即使您的 Java 和 SparkR 应用程序在不同的 JVM 上使用相同的 master 它们的驱动程序 运行 并且不能共享单个 SQLContext
.
有一些工具,例如 Apache Zeppelin,采用不同的方法,将单个 SQLContext
(和 SparkContext
)暴露给各个后端。这样你就可以注册 table 使用例如 Scala 并从 Python 读取它。有a fork of Zeppelin which provides some support for SparkR and R. You can check how it starts and interacts R backend.