apache-spark - Spark 读取 csv 是一种惰性操作还是渴望?
问题描述
我读过一些资源声称 Spark 读取操作通常是惰性的。但是我已经运行了一些在 csv 读取步骤上花费了很长时间的工作。然后我读到这篇文章说 csv read 是一个急切的操作[1]。你有更明确的参考答案吗?谢谢!
1. https://towardsdatascience.com/a-brief-introduction-to-pyspark-ff4284701873
尝试最小化急切操作:为了使您的管道尽可能可扩展,最好避免将完整数据帧拉入内存的急切操作。我注意到读取 CSV 是一项急切的操作,我的解决方法是将数据帧保存为 parquet,然后从 parquet 重新加载以构建更具可扩展性的管道。
解决方案
阅读源代码后,如果禁用了 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
推荐阅读
- javascript - NextJS Link 没有呈现锚标记
- javascript - jsconfig.json 为托管源和测试文件设置?
- .net-core - 动态加载 netstandard 实现程序集
- r - 如何在闪亮中使用反应函数时检索复选框组的列名
- python - 我从 python 开始,一直遇到缩进问题
- transaction-log - 缩小ldf文件以减小文件大小
- virtual-machine - VM 是否模拟线程执行的处理器级别?
- reactjs - 如何对具有来自自定义钩子的状态和方法的表单进行单元测试
- php - PHP:多个文件上传计数问题
- amazon-web-services - 跨账户访问 CodeArtifact 存储库