繁体   English   中英

Spark数据框过滤器优化

[英]Spark Dataframe Filter Optimization

我正在从s3存储桶中读取大量文件。

读取这些文件后,我想对数据框执行过滤操作。

但是,当执行过滤器操作时,数据将从s3存储桶中再次下载。 如何避免重新加载数据帧?

我在过滤器操作之前尝试过缓存和/或持久保存数据帧。 但是,仍然以某种方式再次从s3存储桶中提取数据。

var df = spark.read.json("path_to_s3_bucket/*.json")

df.persist(StorageLevel.MEMORY_AND_DISK_SER_2)

df = df.filter("filter condition").sort(col("columnName").asc)

如果数据帧已缓存,则不应再次从s3重新加载它。

你打电话时

var df = spark.read.json("path_to_s3_bucket/*.json")

幕后发生的事情是spark会执行分区发现,文件列表和模式推断(如果您有很多文件,这可能会在后台运行sum作业并行执行文件列表)。

下次致电时

df.persist(StorageLevel.MEMORY_AND_DISK_SER_2)

只有信息传递给您要保留数据的查询计划,但是此刻暂时没有发生(这是一个懒惰的操作)。

下次致电时

df = df.filter("filter condition").sort(col("columnName").asc)

再次只更新查询计划。

现在,如果您调用诸如show()count()类的动作,则查询计划将被处理并执行spark作业。 因此,现在数据将被加载到群集上,并将其写入内存(由于进行缓存),然后从缓存中读取它,并根据您的查询计划对其进行过滤,排序和进一步处理。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM