我正在使用Apache Spark 1.0.1.我有许多文件用UTF8分隔,\u0001而不是通常的新行\n.如何在Spark中读取此类文件?意思是,默认分隔符sc.textfile("hdfs:///myproject/*")是\n,我想将其更改为\u0001.
我读了一些关于Spark内存管理的文档。
\n\n在此页面上:如果我没有足够的内存,spark 会做什么?。它说:
\n\n\n\n\nSpark将分区存储在内存中的LRU缓存中。当缓存达到其大小限制时,它会从中逐出条目(即分区)。当分区具有 \xe2\x80\x9cdisk\xe2\x80\x9d 属性(即您的持久性级别允许在磁盘上存储分区)时,它将被写入 HDD 并且它消耗的内存将被释放,除非您请求它。当您请求它时,它将被读入内存,如果没有足够的内存,则缓存中的其他较旧条目将被逐出。如果您的分区没有 \xe2\x80\x9cdisk\xe2\x80\x9d 属性,则逐出仅意味着销毁缓存条目而不将其写入 HDD。
\n
那么如果内存不够的话分区会溢出到磁盘,那么Spark运行时怎么会出现内存不足的问题呢?
\n据我所知,Spark会尝试在内存中进行所有计算,除非您使用磁盘存储选项调用persist.但是,如果我们不使用任何持久性,当RDD不适合内存时,Spark会做什么?如果我们有非常庞大的数据怎么办?Spark如何处理它而不会崩溃?
我最近在进行火花工作,遇到了一些我仍然无法解决的查询。
假设我有一个100GB的数据集,而我的群集内存大小为16 GB。
现在,我知道在简单读取文件并将其保存在HDFS中的情况下,Spark会对每个分区执行此操作。对100GB数据执行排序或聚合转换时会发生什么?由于排序时需要全部数据,它将如何处理100GB的内存?
我已经浏览了下面的链接,但这仅告诉我们在持久存在的情况下spark会执行什么操作,我正在寻找的是Spark聚合或对大于ram大小的数据集进行排序。
任何帮助表示赞赏。