当前位置: 首页 > 知识库问答 >
问题:

Spark csv读取速度非常慢,尽管我增加了节点数

何涵衍
2023-03-14

我在Google Compute Engine上创建了两个集群,这些集群读取100 GB的数据。

集群I:1个主机-15 GB内存-250 GB磁盘10个节点-7.5 GB内存-200 GB磁盘

集群II:1主-15 GB内存-250 GB磁盘150节点-1.7 GB内存-200 GB磁盘

我用它来读取文件

val df = spark.read.format("csv")
    .option("inferSchema", true)
    .option("maxColumns",900000)
    .load("hdfs://master:9000/tmp/test.csv")

另外,hadoop的复制或移动命令也很慢。数据只有100 GB。大公司如何处理太字节的数据?我无法捕捉到数据读取速度的增加。

谢谢你的回答

共有1个答案

益炜
2023-03-14

Dr Spark SQL(以及Spark和其他共享类似体系结构和设计的项目)主要是为了处理长数据和(相对)窄数据而设计的。这与您的数据完全相反,输入范围很广,(相对)很短。

请记住,尽管Spark使用列格式进行缓存,但它的核心处理模型处理数据行(记录)。如果数据很宽但很短,这不仅限制了分发数据的能力,更重要的是,会导致非常大的对象的初始化。这对整个内存管理和垃圾收集过程(对于JVM GC来说是大型对象)有不利影响。

在Spark SQL中使用非常广泛的数据会导致额外的问题。就查询中使用的表达式而言,不同的优化器组件具有非线性复杂性。对于数据较窄(<1k列),这通常不是问题,但对于较宽的数据集,这很容易成为瓶颈。

 类似资料:
  • 问题内容: 我正在查询有关的信息。 我正在迭代一个数组,并查询列表中的每个值。 不幸的是 ,在调试器下, 单个查询大约需要3-4秒,而 在禁用调试器的情况下, 查询时间要 短一些。 任何想法为什么这么慢?我使用进行测试。 这是我的代码: 更新资料 当我离开时,评估很快就完成了,但是我没有得到。它返回一个空字符串… 问题答案: 感谢@nvrmnd我尝试了一下,发现了一种更好的解析器: VTD-XML

  • 问题内容: 我面临一个非常奇怪的问题:使用Redis时,我的写入速度非常糟糕(在理想情况下,写入速度应该接近RAM上的写入速度)。 这是我的基准: 是生成随机字符串的类(arg是字符串长度) 以下是几个结果: [写入] nb:100000 |时间:4.408319378 |速度:0.713905907055318 MB / s [写入] nb:100000 |时间:4.4139469070553

  • 我有26个CSV文件,我想每晚从互联网上抓取并上传到Postgresql表中。我使用Java、PreparedStatement和Batch实现了这一点。尽管如此,性能仍然非常缓慢。要获取大约6000个条目并将其放入Postgresql,需要30分钟。这是我第一次做这样的事情,所以我不知道这是快还是慢。 为了获取文件,我使用了以下代码。 然后,我使用PreparedStatement从输入流中提取

  • 我正在使用Protege5.2.0版本,并尝试从http://purl.org/ontology/mo/添加音乐本体。我已经在我的电脑上下载了rdfs,当我尝试导入我的本体上的文件时,加载需要花费很长时间。 特别是,加载“http://purl.org/ontology/similarity/”时,它会冻结:现在它已经在那里大约10分钟了,每次我都必须粗暴地关闭程序,否则它不会停止加载。 有没有办

  • 问题内容: 我已经开发了一个用户批量上传模块。有两种情况,当数据库有零条记录时,我批量上传了20000条记录。大约需要5个小时。但是,当数据库已经有大约30 000条记录时,上传速度将非常缓慢。上载2万条记录大约需要11个小时。我只是通过fgetcsv方法读取CSV文件。 下面是运行的查询。(我正在使用Yii框架) 如果存在,请更新用户: 如果用户不存在,请插入新记录。 表引擎类型为MYISAM。

  • 首先让我先说明一下,我刚刚开始了解如何使用Beam的Python SDK和GCP Dataflow! 问题:我的管道对于几乎所有的用例都非常有效。没有我可以抱怨的错误。我只是对一些可能的瓶颈或我可以做的优化有一些问题。我注意到,当处理大小为50MB的gzipped文件时,我的管道执行时间几乎超过3个小时。不完全确定是否有任何方法来加快这一部分。下面是在作业最终成功完成之前我看到的一堆日志警告的截图