在Databricks Notebook中结合Python与R遇连接错误求助
我希望在Databricks Notebook中结合Python与R进行数据操作,已编写以下Python代码创建Spark DataFrame:
from pyspark.sql import SparkSession spark = SparkSession.builder.appName("CreateDataFrame").getOrCreate() # Create a sample DataFrame data = [("Alice", 25), ("Bob", 30), ("Charlie", 35), ("Oscar",36), ("Hiromi",41), ("Alejandro", 42)] df = spark.createDataFrame(data, ["Name", "Age"]) display(df)
随后编写R代码尝试连接同一Spark集群:
%r install.packages("sparklyr", version ="1.8.0") library(sparklyr) # Connect to the same Spark cluster sc <- spark_connect(master = "yarn-client", version = "1.8.0")
但出现如下错误:
Error in spark_connect_gateway(gatewayAddress, gatewayPort, sessionId, :
Gateway in localhost:8880 did not respond.Try running
options(sparklyr.log.console = TRUE)followed bysc <- spark_connect(...)for more debugging info.
Some( Error in spark_connect_gateway(gatewayAddress, gatewayPort, sessionId, : Gateway in localhost:8880 did not respond. )
在Databricks Notebook中,跨语言共享Spark上下文无需手动调用spark_connect,平台已内置共享的Spark环境,直接使用即可,具体步骤如下:
Python侧注册临时视图
在Python单元格末尾添加代码,将DataFrame注册为全局临时视图,让R可以直接访问:# 注册全局临时视图 df.createOrReplaceGlobalTempView("people")R侧直接访问共享数据
Databricks的R环境已预装适配版本的sparklyr,无需手动安装。直接使用内置的Spark连接读取数据即可:%r library(sparklyr) # 方式1:从全局临时视图读取 r_df <- spark_read_table(sc = spark_connection(), name = "global_temp.people") # 方式2:用SQL查询 r_df <- spark_sql("SELECT * FROM global_temp.people") # 展示数据 display(r_df)若需手动连接sparklyr
若一定要手动建立连接,需使用Databricks专属参数,不要指定master = "yarn-client":%r library(sparklyr) sc <- spark_connect(method = "databricks")该方式会自动适配Databricks内置网关,避免localhost连接错误。
说明:Databricks多语言Notebook原生支持共享Spark会话,通过临时视图跨语言共享数据是最简便高效的方式,无需手动创建新连接。
内容的提问来源于stack exchange,提问作者Oscar CENTENO MORA

