过滤器生成的 PySpark DataFrame - 它存储在哪里?
Posted
技术标签:
【中文标题】过滤器生成的 PySpark DataFrame - 它存储在哪里?【英文标题】:PySpark DataFrame generated by filter - where is it stored? 【发布时间】:2018-03-19 16:59:33 【问题描述】:对于任何软件架构师来说,这可能是一个基本问题,但我对这个概念感到困惑。
假设我有一个存储在 hdfs 上的大型 Spark DataFrame。我现在做这样的过滤操作:
df_new = my_big_hdfs_df.where("my_column='testvalue'")
print(type(df_new))
类'pyspark.sql.dataframe.DataFrame'>
df_new 究竟存储在哪里?如果这是普通的python,我猜想在内存中的某个地方。但对于 PySpark 也是如此吗?还是只是某种参考?它是否保留在 hdfs 某处的磁盘上?
【问题讨论】:
AFAIKdf_new
的内容目前实际上并未存储在任何地方。 Spark 是懒惰的,所以它不会评估 df_new
直到它需要。现在它只存储创建df_new
所需的指令。
【参考方案1】:
df_new
是从my_big_hdfs_df
在where
函数中应用条件后的转换。
或者换句话说,df_new
是一个逻辑计划设置为在调用action
时立即对数据执行。
在调用show()
、count()
、foreach()
等n 操作 之前不会触及数据。
一旦动作被调用,数据就会被转换并且所有的转换都会存储在内存中。有时当调用persist()
时它们会溢出到磁盘。并且在调用保存操作时保存到磁盘。
【讨论】:
以上是关于过滤器生成的 PySpark DataFrame - 它存储在哪里?的主要内容,如果未能解决你的问题,请参考以下文章
当列文本包含超过 10 个单词时过滤 pyspark DataFrame
PySpark:在日期为字符串的范围内按日期字段过滤DataFrame
使用类似 SQL 的 IN 子句过滤 Pyspark DataFrame