Spark中DataFrame转换后原有列的存储机制疑问
Spark DataFrame withColumn 执行后的列数据存储逻辑
执行df = df.withColumn("day", col("songay_xuly").cast("int"))生成新DataFrame后,songay_xuly和ma列并不会复制原df的数据,而是指向原df的底层数据分区,具体逻辑如下:
- Spark的DataFrame本质是逻辑执行计划的抽象,并非直接存储数据的容器。
withColumn操作只是在原df的执行计划上追加了一个新列的生成步骤,完全不会触发实际的数据读取或复制动作。 - 只有当调用
show()、count()、write()这类**行动算子(Action)**时,Spark才会根据完整的执行计划去处理数据。此时原列songay_xuly和ma的数据会被直接复用,不会额外复制一份。 - 结合DataFrame的不可变性特性:原df的底层数据不会被修改,新df只是基于原计划构建的一个新逻辑视图,所有原列的数据源都指向最初的存储介质(比如HDFS、本地文件等)或上游RDD/DF的分区。
内容的提问来源于stack exchange,提问作者Đức Hân Trần
相关产品推荐
相关产品推荐

