如果 Spark 中的数据帧是不可变的,为什么我们能够使用诸如 withColumn() 之类的操作来修改它?

pal*_*upz 10 apache-spark pyspark

这可能是一个愚蠢的问题,源于我的无知。我已经在 PySpark 上工作了几个星期,并没有太多的编程经验可以开始。

我的理解是,在 Spark 中,RDD、数据帧和数据集都是不可变的——我再次理解,这意味着您无法更改数据。如果是这样,为什么我们能够使用 编辑 Dataframe 的现有列withColumn()

nee*_*ani 14

根据 Spark 架构,DataFrame 建立在本质上不可变的 RDD 之上,因此数据帧本质上也是不可变的。

关于 withColumn 或任何其他与此相关的操作,当您对 DataFrame 应用此类操作时,它将生成一个新的数据框,而不是更新现有的数据框。

但是,当您使用动态类型语言 python 时,您会覆盖先前引用的值。因此,当您执行以下语句时

df = df.withColumn()
Run Code Online (Sandbox Code Playgroud)

它将生成另一个数据帧并将其分配给引用“ df”。

为了验证相同,您可以使用id()rdd 的方法来获取数据帧的唯一标识符。

df.rdd.id()

将为您的数据框提供唯一标识符。

我希望上面的解释有帮助。

问候,

尼拉吉