【问题标题】:Spark RDD vs Dataframe - Data storageSpark RDD vs Dataframe - 数据存储
【发布时间】:2019-09-12 08:12:48
【问题描述】:

我是 Spark 的新手,正在学习 Dataframe、操作和架构。在阅读 RDD 和 Dataframe 之间的比较时,我对 RDD 和 Dataframe 的数据结构感到困惑。以下是我的观察,如有错误请帮忙澄清/纠正

1)如果源数据是一个集群(例如:HDFS),RDD 以分布式方式(块)跨集群中的节点存储在计算机 RAM 中。

如果数据源只是单个 CSV 文件,则数据将分布到正在运行的服务器(如果是笔记本电脑)的 RAM 中的多个块中。我说的对吗?

2)block和partition之间有什么关系吗?哪一个是超集?

3)Dataframe:Dataframe 是否也以与 RDD 相同的方式存储?如果我将源数据单独存储到数据框中,是否会在后台创建 RDD?

提前致谢:)

【问题讨论】:

标签: scala apache-spark hdfs


【解决方案1】:

如果源数据是一个集群(例如:HDFS),RDD 以分布式方式(块)跨集群中的节点存储在计算机 RAM 中。

如果启用cachingcheckpointing,它也可能存储在内存或磁盘中。此外,洗牌总是涉及磁盘写入。

如果数据源只是单个 CSV 文件,则数据将分布到正在运行的服务器(如果是笔记本电脑)的 RAM 中的多个块中。我对吗?

CSV 文件会被拆分成多个分区,每个任务只会读取一块数据(起始偏移量)。

块和分区之间有什么关系吗?哪一个是超级套装?

这有点令人困惑,看看这个answer,它指出split 是输入数据的逻辑划分,而block 是数据的物理划分。 Spark 使用自己的术语,Spark 中的partition 与 Hadoop 中的 split 含义大致相同。

当从 HDFS 读取文件时,HadoopRDD 正在被使用并且在后台,每个 split 都将变成一个 partition

Dataframe:Dataframe 是否也以与 RDD 相同的方式存储?如果我将源数据单独存储到数据框中,是否会在后台创建 RDD?

Dataframe 的本质就是 RDD[InternalRow]。
看看SparkPlan

【讨论】:

  • 谢谢!!所以,火花中没有像块这样的概念吗?仅在 HDFS(128MB) 中?
猜你喜欢
  • 1970-01-01
  • 2017-08-16
  • 1970-01-01
  • 2015-10-11
  • 2017-02-03
  • 2017-04-11
  • 1970-01-01
  • 1970-01-01
  • 2020-02-28
相关资源
最近更新 更多