PySpark DataFrame是否为指针?循环重赋值是否影响列表中已添加实例?
问题解答
结论先行:完全不会改变df_list里已有的值,原因分两点说明:
Python的引用逻辑:变量
df只是个"指向对象的标签"。每次执行df = spark.table(path)时,都会生成一个全新的PySpark DataFrame对象,然后把df这个标签贴到新对象上。而之前已经放进df_list的是旧对象的引用,和现在df指向的新对象完全是两个独立个体,后续改df的指向根本碰不到列表里的旧对象。PySpark DataFrame的不可变性:PySpark里的DataFrame是天生不可变的,一旦创建就没法修改内容。你每次从不同路径读出来的都是独立的DataFrame实例,彼此之间没有关联,就算后续变量重新赋值,也不会影响之前已经存入列表的那些实例。
举个接地气的例子:你每次买一瓶新饮料(新DataFrame),把之前的饮料(旧DataFrame)放进冰箱(df_list),然后手里的瓶子(df)换成新饮料,冰箱里的旧饮料不会凭空变成新的。
你的这段代码写法是安全的,最后用reduce合并的就是所有路径下的原始DataFrame,不会出现数据被覆盖的问题。
内容的提问来源于stack exchange,提问作者Nourless
相关产品推荐
相关产品推荐

