繁体   English   中英

rdd vs dataframe 在 pyspark

[英]rdd vs dataframe in pyspark

我刚刚读到 dataframe 具有类似二维数组的存储,其中 rdd 对存储没有任何此类限制。
因此,可以使用数据帧更优化地运行查询。
这是否意味着创建一个 dataframe 比在相同的输入数据集上创建一个 rdd 消耗更多的 memory?
此外,如果我将 rdd 定义为rdd1 ,当我使用toDf方法将 rdd1 转换为 dataframe 时,我是否在节点上消耗了更多 memory ?
同样,如果我有一个 dataframe 并且我正在使用df.rdd方法将它转换为 rdd,我是否在节点上释放了一些空间?

研发:

弹性分布式数据集。 RDD是可以并行操作的容错元素集合,也可以说RDD是Spark的基础数据结构。 通过 RDD,我们可以处理结构化和非结构化数据。 但是,在 RDD 中,用户需要指定摄取数据的模式,RDD 无法推断自己的模式。 它是数据元素的分布式集合。 那分布在集群上的许多机器上,它们是一组表示数据的 Scala 或 Java 对象。 RDD 支持具有编译时类型安全的面向对象编程风格 RDD 本质上是不可变的。 这意味着我们无法更改 RDD 的任何内容如果 RDD 是表格格式,我们可以通过 to() 方法从 RDD 移动到 dataframe。 我们也可以通过 .rdd 方法进行反向操作。 RDD 中没有提供优化引擎。 根据其属性,开发人员优化每个 RDD Spark 不会立即计算结果,它会延迟评估 RDD 由于 RDD API,显式使用模式投影。 因此,用户需要在执行简单的分组和聚合操作时手动定义模式,RDD API 比 DataFrame 慢。

DataFrame:

数据框数据被组织成命名的列。 基本上,它与关系数据库中的表相同如果我们尝试访问表中不存在的任何列,则可能会在运行时发生属性错误。 Dataframe 在这种情况下将不支持编译时类型安全。 无法重新生成域 object,在转换为 dataframe 之后。通过示例,如果我们从 tested 然后生成一个测试数据帧,我们将无法再次恢复测试 class 的原始 RDD。通过使用 Catalyst Optimizer,优化发生在数据框。 在 4 个阶段中,数据帧使用催化剂树转换框架使用堆外 memory 进行序列化减少了开销,同时生成了字节码。 因此,可以对该序列化数据执行许多操作类似地,只有当动作出现时才会发生计算,因为 Spark 懒惰地评估 dataframe 在 dataframe 中,无需指定模式。 通常,它会自动发现模式在执行探索性分析、创建数据聚合统计时,数据帧速度更快。 当我们需要高级抽象和非结构化数据(例如媒体流或文本流)时,我们使用 dataframe。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM