Databricks:如何从R数据框切换到Pandas数据框(在同一个笔记本中从R切换到Python)

5

我在Databricks笔记本中编写R代码,执行多个R操作。当数据框清理完毕后,我想使用“%python”在Python单元格中调用它,并因此使用Python代码继续操作数据框。

因此,我希望在Python块中将我的R Dataframe转换为Pandas dataframe。有人知道如何做到这一点吗?谢谢!


值得一提的是,可以考虑使用 reticulate R 包,因为它方便了 R/Python 之间的互操作性。不过我不确定在 databricks 中是否适用 - 他们可能有其他解决方案。 - Till
你应该将其转换为Spark DataFrame,然后再转回Pandas,虽然你应该能够仅依赖于PySpark,你想要做什么? - Umar.H
3个回答

10

在Databricks上,我认为不同内核之间的命名空间是独立的。因此,即使在同一个笔记本中,您也无法在Python中看到R变量或反之亦然。

我的理解是有两种方法可以在内核之间共享数据:1)使用文件系统(csv等),2)使用临时的Databricks表格。 我相信后者是更典型的路径[1]。

  1. 文件系统:
%r
write.csv(df, "/FileStore/tmp.csv")

%python
import pandas as pd
df = pd.read_csv("/FileStore/tmp.csv")
  1. 临时 Databricks 表:

%r
library(SparkR)
sparkR.session()
df <- read.df("path/to/original_file.csv", source="csv")
registerTempTable(df, "tmp_df")

%python
df = spark.sql("select * from tmp_df").toPandas()

[1] https://forums.databricks.com/questions/16039/use-python-and-r-variable-in-the-same-notebook-amo.html


2
注意:自rpy2 3.3.0版本发布以来,显式转换如下进行。
import rpy2.robjects as ro

dt = pd.DataFrame()

转换为 R DataFrame

r_dt = ro.conversion.py2rpy(dt)

转换为pandas DataFrame

pd_dt = ro.conversion.rpy2py(r_dt)

2
很遗憾,在Databricks环境中无法正常工作。在Python代码块中,R对象将无法找到。NameError: 名称'r_dt'未定义 - Nick
我遇到了完全相同的问题:没有一种与Databricks兼容且可以轻松切换R和Pandas dfs的方法。 r2py不起作用,feather也不起作用,甚至尝试将R df转换为Spark df,但是在我尝试在Python单元格上运行toPandas()时,下面的Python单元格仍然找不到它。 您有找到解决方法吗? - Mel

0
这并不是一个简单的过程,需要在Databricks中进行几个步骤:
  1. 将R的data.frame转换为SparkDataFrame
  2. 将SparkDataFrame注册为临时视图(无法在常规的data.frame或data.table上执行此操作)
  3. 将临时视图转换为pandas或pyspark DataFrame
第二步是必要的,以便Python cmd单元格能够“找到”数据框。否则,您将会遇到之前提到的NameError错误。
以下是一个示例:
  1. R cmd单元格:

df <- as.DataFrame(df)
createOrReplaceTempView(df, "df")

Python命令行单元格:

import pyspark
from pyspark.sql import SparkSession

# Create a SparkSession
spark = SparkSession.builder.appName("Temp View").getOrCreate()

# Import the temp view
df_pandas = spark.sql("SELECT * FROM df")


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接