Python 如何在pyspark中保存数据帧转换过程的部分结果?

Python 如何在pyspark中保存数据帧转换过程的部分结果?,python,apache-spark,pyspark,Python,Apache Spark,Pyspark,我在apachespark中工作,用python在单个数据帧上进行多个转换 为了简化不同的转换,我编写了一些函数。假设我们有如下功能: clearAccents(df,columns) #lines that remove accents from dataframe with spark functions or #udf return df 我使用这些函数“覆盖”dataframe变量,以保存每次函数返回时转换的新dataframe。我知道这不是一个好的做法,现在我看到了后果 我

我在apachespark中工作,用python在单个数据帧上进行多个转换

为了简化不同的转换,我编写了一些函数。假设我们有如下功能:

clearAccents(df,columns)
#lines that remove accents from dataframe with spark functions or 
#udf
    return df
我使用这些函数“覆盖”dataframe变量,以保存每次函数返回时转换的新dataframe。我知道这不是一个好的做法,现在我看到了后果

我注意到,每次我添加一行,如下所示,运行时间更长:

# Step transformation 1:
df = function1(df,column)
# Step transformation 2.
df = function2(df, column)
据我所知,Spark并没有保存生成的数据帧,但它保存了在当前行中获取数据帧所需的所有操作。例如,当运行函数
function1
时,Spark仅运行此函数,但当运行
function2
时,Spark运行
function1
,然后,
function2
。如果我真的需要只运行一个函数呢

我尝试了
df.cache()
df.persist()
但是没有得到想要的结果


我想以一种方式保存部分结果,这种方式不需要计算自开始以来的所有指令,并且只需要从上一个转换函数开始,而不会产生stackoverflow错误

您可能无法从
cache()
persist()
中获得所需的结果,因为在您调用操作之前不会对它们进行计算。您可以尝试以下方法:

# Step transformation 1:
df = function1(df,column).cache()

# Now invoke an action
df.count()

# Step transformation 2.
df = function2(df, column)
要查看执行图的变化,Spark作业UI中的SQL选项卡是一个特别有用的调试工具

我还建议您检查一下,看看是否值得实现一个定制的
转换器
。请参阅。

可能的副本