2016-02-12 56 views
2

所以這裏是設置。在Java和R應用程序之間使用同一個主機共享SparkContext

目前我有兩個Spark應用程序初始化。我需要在它們之間傳遞數據(最好通過共享的sparkcontext/sqlcontext,這樣我就可以查詢臨時表)。我目前使用Parquet文件進行數據幀傳輸,但有可能採用其他方式嗎?通過終端

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"); 

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 

回答

2

據我所知,它給你的當前配置是不可能的。使用registerTempTable創建的表格綁定到特定的SQLContext,該表格用於創建相應的DataFrame。即使您的Java和SparkR應用程序使用相同的主控制器,其驅動程序也可以在單獨的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

相關問題