Azure Databricks同一单元格修改magic标签及Spark DataFrame转R数据框问题
Azure Databricks Spark DataFrame 转 R data.frame 报错解决方案
报错根因说明
- 同一单元格执行
as.data.frame报语法错误:默认单元格运行上下文为Python/Scala,未声明R上下文直接调用R方法会触发语法校验失败 - 拆分单元格加
%r后报对象不存在:Databricks不同语言的运行上下文完全隔离,非R上下文创建的变量不会自动同步到R上下文,因此R环境识别不到原Spark DataFrame变量
修复步骤
步骤1:将原Spark DataFrame注册为会话临时视图
在你创建Spark DataFrame的原单元格(Python/Scala上下文均可)执行注册命令,以Python为例:
# your_spark_df 替换为你实际的Spark DataFrame变量名,temp_view_name 自定义临时视图名称 your_spark_df.createOrReplaceTempView("temp_view_name")
如果是Scala上下文,语法为:
your_spark_df.createOrReplaceTempView("temp_view_name")
步骤2:在R上下文单元格完成转换
新建单元格,开头第一行必须加%r声明R运行环境,再通过Spark SQL读取临时视图后执行转换:
%r # 读取临时视图,得到R上下文可识别的Spark DataFrame对象 r_spark_df <- sql("SELECT * FROM temp_view_name") # 转换为R原生data.frame r_native_df <- as.data.frame(r_spark_df)
注意事项
- 转换操作会将全量数据拉取到Driver节点内存,大数据集建议先做过滤、聚合缩小数据量后再转换,避免Driver OOM
- 临时视图为会话级别,当前Databricks notebook会话结束后会自动销毁,无需手动清理
- 若Spark DataFrame本身就是在R上下文创建的,不需要走临时视图流程,只要单元格开头声明
%r即可直接调用as.data.frame()转换
内容的提问来源于stack exchange,提问作者Shashank
相关产品推荐
相关产品推荐

