使用Apache Spark加载非常大的CSV文件

时间:2019-04-30 12:03:19

标签: apache-spark pyspark

我需要使用Apache Spark加载庞大的csv文件。

到目前为止,我已经使用Apache Spark的read方法加载了不同的文件。我没有遇到任何问题。但是,文件大小并不大,大约100兆字节。

现在,我收到了一些可扩展性问题,例如: “如果文件不适合驱动程序的内存,会发生什么?”

spark.read方法如何工作?是否将csv文件加载到驱动程序的(主节点)内存中?任何想法,经验或文档,我将不胜感激。

示例代码:

df = spark.read.format("csv").option("header","true").load("hugecsvfile.csv")

2 个答案:

答案 0 :(得分:1)

此代码不会将文件加载到内存中。它将读取文件一次以定义架构,仅此而已。否则,最好提供该模式,否则仅需定义即可。至少,您可以设置一些选项,使其仅读取文件的一部分。

在那之后,任何转换/动作都将在文件的大块上执行。

答案 1 :(得分:1)

从您发布的代码示例中,可以看出hugecsvfile.csv已经在主节点中。但在磁盘上。

因此spark将读取您的文件并将数据发送到集群中的核心节点。如果需要,Spark会自动将数据溢出到这些核心节点的磁盘上。 -您可以明确地告诉它在磁盘上缓存计算,但是如果不这样做,它将在文件上重新计算。

执行操作时,火花仅将数据带到主节点的内存中(不会溢出到主节点的磁盘上)。