Python 如何在pyspark中保存数据帧转换过程的部分结果?
我在apachespark中工作,用python在单个数据帧上进行多个转换 为了简化不同的转换,我编写了一些函数。假设我们有如下功能: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。我知道这不是一个好的做法,现在我看到了后果 我
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选项卡是一个特别有用的调试工具
我还建议您检查一下,看看是否值得实现一个定制的转换器
。请参阅。可能的副本