【问题标题】:What is difference between dataframe created using SparkR and dataframe created using Sparklyr?使用 SparkR 创建的数据框和使用 Sparklyr 创建的数据框有什么区别?
【发布时间】:2025-12-24 04:55:12
【问题描述】:

我正在阅读 Azure 数据块中的镶木地板文件: 使用 SparkR > read.parquet() 使用 Sparklyr > spark_read_parquet() 两个数据帧都不同,有什么方法可以将 SparkR 数据帧转换为 sparklyr 数据帧,反之亦然?

【问题讨论】:

  • 一个 Spark 数据帧应该是一个 Spark 数据帧,不管创建它的 API 是什么。 (不过,不同的 API 可能会为它提供不同的转换方法。)你能详细说明你看到的具体差异吗?
  • 我无法使用 sparklyr 命令对使用 read.parquet()(SparkR 命令)创建的数据帧进行数据操作。
  • 这是意料之中的,因为即使 spark 数据帧相同,表示数据帧的 R 对象对于两个包也是不同的。此外,数据帧可能属于不同的火花上下文,具体取决于您的配置。为什么不直接用 sparklyr 读取 parquet 文件?

标签: r parquet databricks sparkr sparklyr


【解决方案1】:

sparklyr 创建 tbl_spark。这本质上只是一个用 Spark SQL 编写的惰性查询。 SparkR 创建了一个 SparkDataFrame,它更像是使用计划组织的数据集合。

同样,您不能将 tbl 用作普通 data.frame,您也不能像使用 SparkDataFrame 一样使用 tbl_spark。

我能想到的将一个转换为另一个的唯一方法是将其写入您的数据湖/数据仓库或先将其读入 r。

【讨论】:

  • 似乎是一个很好的解决方案,但我想使用凭证直通,所以再次读取数据是主要问题。 Sparklyr 不支持凭证传递。