Spark 数据帧 CSV 与 Parquet

Posted

技术标签:

【中文标题】Spark 数据帧 CSV 与 Parquet【英文标题】:Spark dataframe CSV vs Parquet 【发布时间】:2018-02-11 00:36:01 【问题描述】:

我是 Spark 的初学者,并试图了解 Spark 数据帧的机制。 当从 csv 和 parquet 加载数据时,我正在比较 spark sql 数据帧上的 sql 查询的性能。我的理解是,一旦将数据加载到 spark 数据框中,数据的来源(csv 或 parquet)就无关紧要了。但是,我看到两者之间存在显着的性能差异。我正在使用以下命令加载数据并针对它编写查询。

dataframe_csv = sqlcontext.read.format("csv").load()

dataframe_parquet = sqlcontext.read.parquet()

请解释造成差异的原因。

【问题讨论】:

Is querying against a Spark DataFrame based on CSV faster than one based on Parquet?的可能重复 您能否说明您在哪里看到了性能差异?是在您从 csv/parquet 读取数据后实际运行 spark sql 查询的时候吗? Spark 对数据帧有惰性求值。如果您要计算在 sql 查询数据帧上执行操作(例如,.show()、.count() 等)需要多长时间,它很可能包括从 csv/parquet 读取的时间。因此,镶木地板应该更快。 【参考方案1】:

之所以看到 csv 和 parquet 之间的性能不同,是因为 parquet 具有列式存储,而 csv 具有纯文本格式。列式存储更适合实现较小的存储大小,但从数据帧读取纯文本速度更快。

【讨论】:

以上是关于Spark 数据帧 CSV 与 Parquet的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Spark 数据帧将 csv 数据加载到配置单元中?

将 Spark 数据帧写入带分区的 CSV

将 Spark 数据帧写入带分区的 CSV

读取 CSV 后具有奇怪值的 Spark 数据帧

将包含 Vector 作为特征的 Spark 数据帧转换为 CSV 文件

根据 CSV 记录从 Spark 数据帧中过滤一些数据