【发布时间】:2020-10-23 12:36:02
【问题描述】:
在 Apache Spark 中,RDD 是不可变的。
数据集和数据框怎么样?它们是可变的还是不可变的(因为底层结构仍然是 RDD)?
【问题讨论】:
-
一切都是不可变的。每个操作都会返回一个新的 DataFrame/DataSet。
标签: apache-spark apache-spark-sql rdd apache-spark-dataset
在 Apache Spark 中,RDD 是不可变的。
数据集和数据框怎么样?它们是可变的还是不可变的(因为底层结构仍然是 RDD)?
【问题讨论】:
标签: apache-spark apache-spark-sql rdd apache-spark-dataset
由于像 DataFrames/Datasets 这样的结构化 API 是建立在本质上不可变的 RDD(Low Level API) 之上的,因此 Dataframes/Datasets 在本质上是不可变的。
RDD 不仅是不可变的,而且是其输入的确定性函数。这意味着可以随时重新创建RDD。每次将唯一标识符分配给 RDD。
myDF.rdd.id() #Before id
myDF = myDF.withColumn("salary",col("salary")*100)
myDF.rdd.id() #After id
【讨论】:
Dataset属于Spark-SQL API,在LogicalPlan和PhysicalPlan之后,转为RDD程序。所以数据集是不可变的。
【讨论】: