【问题标题】:What's the difference between RDD and Dataframe in Spark? [duplicate]Spark中的RDD和Dataframe有什么区别? [复制]
【发布时间】:2019-12-25 06:31:15
【问题描述】:
您好,我对 apache spark 比较陌生。我想了解 RDD、数据框和数据集之间的区别。
例如,我正在从 s3 存储桶中提取数据。
df=spark.read.parquet("s3://output/unattributedunattributed*")
在这种情况下,当我从 s3 加载数据时,RDD 是什么?此外,由于 RDD 是不可变的,我可以更改 df 的值,因此 df 不能是 rdd。
如果有人能解释 RDD、dataframe 和 datasets 之间的区别,不胜感激。
【问题讨论】:
标签:
apache-spark
pyspark
pyspark-sql
【解决方案1】:
df=spark.read.parquet("s3://output/unattributedunattributed*")
使用此语句,您正在创建一个数据框。
创建RDD使用
df=spark.textFile("s3://output/unattributedunattributed*")
RDD 代表弹性分布式数据集。它是记录的只读分区集合。 RDD 是 Spark 的基础数据结构。它允许程序员执行内存计算
在 Dataframe 中,数据组织成命名列。例如关系数据库中的表。它是一个不可变的分布式数据集合。 Spark 中的 DataFrame 允许开发人员将结构强加到分布式数据集合上,从而实现更高级别的抽象。
- 如果要将地图或过滤器应用于整个数据集,请使用 RDD
- 如果您想处理单个列或想对列执行操作/计算,请使用 Dataframe。
例如,如果您想将整个数据中的“A”替换为“B”
那么RDD是有用的。
rdd = rdd.map(lambda x: x.replace('A','B')
如果要更新列的数据类型,请使用Dataframe。
dff = dff.withColumn("LastmodifiedTime_timestamp", col('LastmodifiedTime_time').cast('timestamp')
RDD可以转换成Dataframe,反之亦然。