【问题标题】:Share SparkContext between Java and R Apps under the same Master在同一个 Master 下的 Java 和 R 应用之间共享 SparkContext
【发布时间】:2016-05-24 03:18:30
【问题描述】:

所以这里是设置。

目前我已经初始化了两个 Spark 应用程序。我需要在它们之间传递数据(最好通过共享的 sparkcontext/sqlcontext 来查询临时表)。我目前使用 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

【问题讨论】:

    标签: java r apache-spark dataframe apache-spark-sql


    【解决方案1】:

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

    有些工具,例如 Apache Zeppelin,采用了不同的方法,将单个 SQLContext(和 SparkContext)暴露给各个后端。通过这种方式,您可以使用例如 Scala 注册表并从 Python 中读取它。有a fork of Zeppelin which provides some support for SparkR and R。你可以检查它是如何starts and interacts R backend

    【讨论】:

      猜你喜欢
      • 2010-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-29
      • 2018-03-08
      • 1970-01-01
      相关资源
      最近更新 更多