Spark 中的 RDD 和 Dataframe 有什么区别?

3 apache-spark apache-spark-sql pyspark

嗨,我对 apache Spark 比较陌生。我想了解 RDD、数据帧和数据集之间的区别。

例如,我正在从 s3 存储桶中提取数据。

df=spark.read.parquet("s3://output/unattributedunattributed*")
Run Code Online (Sandbox Code Playgroud)

在这种情况下,当我从 s3 加载数据时,RDD 是什么?另外,由于 RDD 是不可变的,我可以更改 df 的值,因此 df 不能是 rdd。

如果有人能解释 RDD、数据帧和数据集之间的区别,我将不胜感激。

Ama*_*ngh 5

df=spark.read.parquet("s3://output/unattributedunattributed*")
Run Code Online (Sandbox Code Playgroud)

使用此语句,您将创建一个数据框。

创建 RDD 使用

df=spark.textFile("s3://output/unattributedunattributed*")
Run Code Online (Sandbox Code Playgroud)

RDD 代表弹性分布式数据集。它是只读分区记录集合。RDD是Spark的基础数据结构。它允许程序员执行内存计算

在 Dataframe 中,数据组织成命名列。例如关系数据库中的表。它是一个不可变的分布式数据集合。Spark 中的 DataFrame 允许开发人员将结构强加到分布式数据集合上,从而实现更高级别的抽象。

  1. 如果要将映射或过滤器应用于整个数据集,请使用 RDD
  2. 如果您想处理单个列或想要对列执行操作/计算,请使用 Dataframe。

例如,如果你想用“B”替换整个数据中的“A”,那么 RDD 就很有用。

rdd = rdd.map(lambda x: x.replace('A','B')
Run Code Online (Sandbox Code Playgroud)

如果你想更新列的数据类型,那么使用Dataframe。

dff = dff.withColumn("LastmodifiedTime_timestamp", col('LastmodifiedTime_time').cast('timestamp')
Run Code Online (Sandbox Code Playgroud)

RDD 可以转换为 Dataframe,反之亦然。