代码之家  ›  专栏  ›  技术社区  ›  Clock Slave

python-尝试使用复制模块创建Spark数据帧的副本时出现递归错误

  •  0
  • Clock Slave  · 技术社区  · 7 年前

    我正在尝试使用 copy 但我遇到了一个 RecursionError . 下面是我使用的代码

    >>> df = spark.createDataFrame([[1,2],[3,4]],['x1','x2'])
    >>> df.show()
    +---+---+
    | x1| x2|
    +---+---+
    |  1|  2|
    |  3|  4|
    +---+---+
    >>> import copy
    >>> df_copy = copy.copy(df)
    

    此代码导致 RecursionError: maximum recursion depth exceeded . 我用的时候也是这样 copy.deepcopy 也。

    在Python中创建Spark数据帧副本的正确方法是什么?为什么当前的方法会导致递归错误?

    1 回复  |  直到 7 年前
        1
  •  3
  •   Florian    7 年前

    复制 DataFrame 您可以将它赋给一个新的变量:

    import pyspark.sql.functions as F
    import pandas as pd
    
    # Sample data
    df = pd.DataFrame({'x1': [1,2,3] })
    df = spark.createDataFrame(df)
    
    df2 = df
    df2 = df2.withColumn('x1', F.col('x1') + 1)
    
    print('df:')
    df.show()
    print('df2:')
    df2.show() 
    

    输出:

    df:
    +---+
    | x1|
    +---+
    |  1|
    |  2|
    |  3|
    +---+
    
    df2:
    +---+
    | x1|
    +---+
    |  2|
    |  3|
    |  4|
    +---+
    

    如你所见,复制后 df df2 改变复制品,我们的原版 数据帧 东风 保持不变。