我需要使用Apache Spark加载庞大的csv文件。
到目前为止,我已经使用Apache Spark的read
方法加载了不同的文件。我没有遇到任何问题。但是,文件大小并不大,大约100兆字节。
现在,我收到了一些可扩展性问题,例如: “如果文件不适合驱动程序的内存,会发生什么?”
spark.read
方法如何工作?是否将csv文件加载到驱动程序的(主节点)内存中?任何想法,经验或文档,我将不胜感激。
示例代码:
df = spark.read.format("csv").option("header","true").load("hugecsvfile.csv")
答案 0 :(得分:1)
此代码不会将文件加载到内存中。它将读取文件一次以定义架构,仅此而已。否则,最好提供该模式,否则仅需定义即可。至少,您可以设置一些选项,使其仅读取文件的一部分。
在那之后,任何转换/动作都将在文件的大块上执行。
答案 1 :(得分:1)
从您发布的代码示例中,可以看出hugecsvfile.csv
已经在主节点中。但在磁盘上。
因此spark将读取您的文件并将数据发送到集群中的核心节点。如果需要,Spark会自动将数据溢出到这些核心节点的磁盘上。 -您可以明确地告诉它在磁盘上缓存计算,但是如果不这样做,它将在文件上重新计算。
执行操作时,火花仅将数据带到主节点的内存中(不会溢出到主节点的磁盘上)。