首页 > 解决方案 > Spark 读取 csv 是一种惰性操作还是渴望?

问题描述

我读过一些资源声称 Spark 读取操作通常是惰性的。但是我已经运行了一些在 csv 读取步骤上花费了很长时间的工作。然后我读到这篇文章说 csv read 是一个急切的操作[1]。你有更明确的参考答案吗?谢谢!

1. https://towardsdatascience.com/a-brief-introduction-to-pyspark-ff4284701873

尝试最小化急切操作:为了使您的管道尽可能可扩展,最好避免将完整数据帧拉入内存的急切操作。我注意到读取 CSV 是一项急切的操作,我的解决方法是将数据帧保存为 parquet,然后从 parquet 重新加载以构建更具可扩展性的管道。

标签: apache-sparkpysparkapache-spark-sql

解决方案


阅读源代码后,如果禁用了 inferSchema 选项,则显示读取 CSV 是惰性的:

如果未使用schema函数指定模式并且inferSchema启用了选项,则该函数通过输入一次以确定输入模式。

如果未使用schema函数指定架构并且inferSchema禁用了选项,则它将列确定为字符串类型,并且仅读取第一行以确定名称和字段数。

如果将 enforceSchema 设置为false,则仅检查第一行中的 CSV 标头以符合指定或推断的模式。

2021 年 7 月编辑:来源:https ://github.com/apache/spark/blob/master/sql/core/src/main/scala/org/apache/spark/sql/DataFrameReader.scala#L560


推荐阅读