【问题标题】:Databricks: How to switch from R Dataframe to Pandas Dataframe (R to python in the same notebook)Databricks:如何从 R Dataframe 切换到 Pandas Dataframe(R 到 python 在同一个笔记本中)
【发布时间】:2020-06-24 18:30:16
【问题描述】:

我正在 Databricks 笔记本中编写 R 代码,该笔记本在 R 中执行多项操作。清理数据帧后,我想使用“%python”在 python 单元中调用它,因此使用 python 代码继续操作数据框。

因此,我想在 python 块中将我的 R 数据框转换为 Pandas 数据框。有人知道怎么做这个吗?谢谢!

【问题讨论】:

  • 检查reticulate R 包可能是值得的,因为它促进了 R/Python 互操作性。不知道这是否是使用数据块的方式 - 他们可能有另一种解决方案。
  • 您应该将其转换为 Spark DataFrame,然后再转换回 Pandas,虽然您应该能够完全依赖 PySpark,但您要做什么?

标签: python r pandas dataframe databricks


【解决方案1】:

我认为不同内核之间的命名空间在 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. 临时数据块表:
%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 release 3.3.0 显式转换如下

    import rpy2.robjects as ro
    
    dt = pd.DataFrame()
    

    到 R 数据帧

    r_dt = ro.conversion.py2rpy(dt)
    

    到熊猫数据框

    pd_dt = ro.conversion.rpy2py(r_dt)
    

    【讨论】:

    • 不幸的是,它在 Databricks 环境中不起作用。在 python 代码中找不到 R 对象。 NameError: name 'r_dt' is not defined
    • 我遇到了完全相同的问题:无法在与 Databricks 兼容的 R 和 Pandas dfs 之间轻松切换。 r2py 不起作用,feather 不起作用,甚至尝试将 R df 转换为 Spark df,但是当我尝试在其上运行 toPandas() 时,以下 Python 单元仍然找不到它。你有没有找到解决办法?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-23
    • 2019-04-18
    • 2014-11-04
    • 2017-04-13
    • 2017-07-02
    • 2017-04-29
    相关资源
    最近更新 更多