在 pyspark 数据框中加载更少的列是否有任何性能(或其他)好处?

Is there any performance (or other) benefit to loading less columns in pyspark dataframe?

在 pyspark 数据帧中加载较少的列是否有任何性能(或其他)优势?

基本上我的用例是我有一个大的 table(很多行,很多列),我正在将其作为数据框加载,以根据两者中的匹配键过滤掉另一个 table 所以像...

filter_table = sparksession.read.load("/some/path/to/files").select("PK").dropDuplicates()
table_to_filter = table_to_filter.join(filter_table.select("PK"), "PK", "leftsemi")

我的问题是:像这样加载 table 有什么好处吗

filter_table = sparksession.read.load("/some/path/to/files").select("PK")

vs

filter_table = sparksession.read.load("/some/path/to/files")

我怀疑我对 spark 的惰性求值如何工作感到困惑(对使用 spark 很陌生),但我认为因为我只将 table 与 .select("PK") 一起使用,所以会有没有区别(除非整个数据帧一旦加载就存储在内存中(并且不仅在评估时))?

阅读少量专栏肯定有性能优势,优势程度因数据格式和来源而异。

如果您使用的是像 Parquet 这样的柱状数据源,那么它会通过只读取相关的列组来提供很大帮助。它减少了反序列化数据的 IO、内存占用和时间。列式数据库也有同样的好处。

如果数据源不像文本、csv、avro 文件或数据库(如 Oracle、MS)那样是列式的 Sql 那么它不会减少 IO,但是您可能会受益于更少的内存占用和数据传输成本对于数据库。阅读非分栏文件可能没有太大好处。

这可能会增加您的代码的复杂性,特别是如果您使用的是案例 class 支持的数据集。如果您 select 几列,那么它将与基础案例 class 不匹配。如果您使用的是数据框,则问题不大。