【问题标题】:Is Spark read csv a lazy operation or eager?Spark 读取 csv 是一种惰性操作还是渴望?
【发布时间】:2021-07-27 22:55:15
【问题描述】:

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

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

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

【问题讨论】:

  • 这是一个懒惰的评估者

标签: apache-spark pyspark apache-spark-sql


【解决方案1】:

阅读源代码后,如果禁用了 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

【讨论】:

  • 你能提供你的来源吗?我想了解这对于 csv 以外的其他来源是如何工作的
猜你喜欢
  • 1970-01-01
  • 2011-08-10
  • 2011-12-09
  • 2014-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-02
  • 1970-01-01
相关资源
最近更新 更多