apache-spark - Pyspark 数据框中的 Cache()
问题描述
我有一个数据框,我需要在上面包含几个转换。我想在同一个数据框中执行所有操作。因此,如果我需要使用缓存,我应该在执行每个操作后缓存数据帧吗?
df=df.selectExpr("*","explode(area)").select("*","col.*").drop(*['col','area'])
df.cache()
df=df.withColumn('full_name',f.concat(f.col('first_name'),f.lit(' '),f.col('last_name'))).drop('first_name','last_name')
df.cache()
df=df.withColumn("cleaned_map", regexp_replace("date", "[^0-9T]", "")).withColumn("date_type", to_date("cleaned_map", "ddMMyyyy")).drop('date','cleaned_map')
df.cache()
df=df.filter(df.date_type.isNotNull())
df.show()
我应该像这样添加还是缓存一次就足够了?
另外我想知道我是否对上述代码使用多个数据帧而不是一个数据帧,是否应该在每次转换时都包含缓存。非常感谢 !
解决方案
答案很简单,当你这样做df = df.cache()
或df.cache()
两者都定位到粒度级别的 RDD 时。现在,一旦你执行任何操作,它就会创建一个新的 RDD,所以这很明显不会被缓存,所以说这取决于你想要哪个 DF/RDD cache()
。另外,尽量避免尝试不必要的缓存因为数据将保存在内存中。
以下是cache()
来自 spark文档的源代码
def cache(self):
"""
Persist this RDD with the default storage level (C{MEMORY_ONLY_SER}).
"""
self.is_cached = True
self.persist(StorageLevel.MEMORY_ONLY_SER)
return self
推荐阅读
- postgresql - 数据更新到 Postgres 时性能不佳
- javascript - 反应日期日历中的个人资料图片
- django - 如何根据Django中另一个表的列值的条件填充表
- java - Java中的Levenshtein算法
- python - 如何检查字符串是否存在于python中另一个字符串的任何部分
- python - 使插槽具有 1..N 范围内的唯一数字对
- c - libxml2 中 xmlSetProp 的备用函数
- javascript - 如何在 cookie 创建中同时设置安全和相同站点:严格?
- python - 调整子图为彩条腾出空间
- r - 使用 glmm 为单个比例的元分析添加或计算权重