这可能是一个愚蠢的问题源于我的无知。我已经在pyspark上工作了几个星期了,没有太多编程经验。我的理解是,在spark中,rdd、dataframes和dataset都是不可变的——我再次理解,这意味着您不能更改数据。如果是这样,为什么我们可以使用 withColumn() ?
withColumn()
ekqde3dh1#
你不是;文件明确指出通过添加列或替换具有相同名称的现有列返回新数据集。如果你保持一个变量引用你调用的Dataframe withColumn 在上,它不会有新的专栏。
withColumn
svgewumm2#
根据spark架构,Dataframe建立在rdd之上,rdd本质上是不可变的,因此Dataframe本质上也是不可变的。关于withcolumn或任何其他操作,当您对Dataframe应用此类操作时,它将生成新的Dataframe,而不是更新现有的Dataframe。但是,当您使用动态类型化语言python时,会覆盖前面引用的值。因此,当您执行下面的语句时
df = df.withColumn()
它将生成另一个Dataframe并将其分配给reference“ df ".为了验证这一点,您可以使用 id() 方法来获取Dataframe的唯一标识符。 df.rdd.id() 将为Dataframe提供唯一标识符。我希望上面的解释有帮助。当做,尼拉吉
df
id()
df.rdd.id()
2条答案
按热度按时间ekqde3dh1#
你不是;文件明确指出
通过添加列或替换具有相同名称的现有列返回新数据集。
如果你保持一个变量引用你调用的Dataframe
withColumn
在上,它不会有新的专栏。svgewumm2#
根据spark架构,Dataframe建立在rdd之上,rdd本质上是不可变的,因此Dataframe本质上也是不可变的。
关于withcolumn或任何其他操作,当您对Dataframe应用此类操作时,它将生成新的Dataframe,而不是更新现有的Dataframe。
但是,当您使用动态类型化语言python时,会覆盖前面引用的值。因此,当您执行下面的语句时
它将生成另一个Dataframe并将其分配给reference“
df
".为了验证这一点,您可以使用
id()
方法来获取Dataframe的唯一标识符。df.rdd.id()
将为Dataframe提供唯一标识符。我希望上面的解释有帮助。
当做,
尼拉吉