过滤器生成的 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 某处的磁盘上?

【问题讨论】:

AFAIK df_new 的内容目前实际上并未存储在任何地方。 Spark 是懒惰的,所以它不会评估 df_new 直到它需要。现在它只存储创建df_new 所需的指令。 【参考方案1】:

df_new 是从my_big_hdfs_dfwhere 函数中应用条件后的转换

或者换句话说,df_new一个逻辑计划设置为在调用action 时立即对数据执行。

在调用show()count()foreach()n 操作 之前不会触及数据。

一旦动作被调用,数据就会被转换并且所有的转换都会存储在内存中。有时当调用persist() 时它们会溢出到磁盘。并且在调用保存操作时保存到磁盘

【讨论】:

以上是关于过滤器生成的 PySpark DataFrame - 它存储在哪里?的主要内容,如果未能解决你的问题,请参考以下文章

当列文本包含超过 10 个单词时过滤 pyspark DataFrame

PySpark:在日期为字符串的范围内按日期字段过滤DataFrame

Pyspark Dataframe 组通过过滤

使用类似 SQL 的 IN 子句过滤 Pyspark DataFrame

如何从 Pyspark Dataframe 中的字符串列中过滤字母值?

在pyspark中以分布式方式有效地生成大型DataFrame(没有pyspark.sql.Row)