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

时间:2018-07-20 07:16:59

标签: python apache-spark pyspark apache-spark-sql

我正在尝试使用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数据框副本的正确方法是什么?为什么当前的方法会导致递归错误?

1 个答案:

答案 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保持不变。