【发布时间】:2016-05-10 16:18:55
【问题描述】:
我在 apache-spark 工作,使用 python 在单个 Dataframe 上进行多次转换。
我已经编写了一些函数来简化不同的转换。想象一下我们有这样的功能:
clearAccents(df,columns)
#lines that remove accents from dataframe with spark functions or
#udf
return df
我使用这些函数来“覆盖”数据帧变量,以保存每次每个函数返回时转换的新数据帧。我知道这不是一个好的做法,现在我看到了后果。
我注意到每次像下面这样添加一行,运行时间就会更长:
# 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 错误。
【问题讨论】:
标签: python apache-spark pyspark