我正在尝试使用python的copy
模块创建spark数据帧的副本,但是我遇到了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数据框副本的正确方法是什么?为什么当前的方法会导致递归错误?
答案 0 :(得分:3)
要(浅)复制一个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
并更改副本后,我们原来的DataFrame
df
保持不变。