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

在CSV上使用spark高效执行计数区分?

祁修平
2023-03-14

我有大量的数据,我希望高效地(即使用相对较小的Spark群集)执行其中一列的计数和区分操作。

如果我做什么似乎很明显,即加载数据到数据帧:

df = spark.read.format("CSV").load("s3://somebucket/loadsofcsvdata/*").toDF()
df.registerView("someview")

然后尝试运行查询:

domains = sqlContext.sql("""SELECT domain, COUNT(id) FROM someview GROUP BY domain""")
domains.take(1000).show()

我的群集只是崩溃和烧毁—抛出内存不足异常或挂起/崩溃/未完成操作。

我猜在这条路上的某个地方,有某种连接会让遗嘱执行人的记忆荡然无存?

当源数据大规模而目标数据不是时,执行这样的操作的理想方法是什么(上述查询中的域列表相对较短,应该很容易适应内存)

此问题提供的相关信息:spark的最佳值应该是多少。sql。洗牌分区,或者在使用Spark SQL时如何增加分区?

共有1个答案

云远
2023-03-14

我建议调整您的executors设置。特别是,正确设置以下参数可以显著提高性能

spark.executor.instances
spark.executor.memory
spark.yarn.executor.memoryOverhead
spark.executor.cores

在您的情况下,我还建议根据需要调整分区的数量,尤其是将以下参数从默认值200增加到更高的值。

spark.sql.shuffle.partitions
 类似资料:
  • 我们有一个web应用程序,帮助组织生物实验(用户描述实验和上传实验数据)。在主页中,我们展示了前10个实验,然后在上一个下一个1 2 3..30. 我虫子我如何使有效的总计数和分页。目前: 我想开发分页,总是执行相同的。记录计数不得影响分页或记录总数。

  • spark如何给一个执行器分配一个分区? 当我使用 1 个驱动程序和 5 个执行器在火花外壳中运行以下行时: 重新分区后,10个分区仍然位于原来的两个节点上(总共5个)。这似乎非常低效,因为5个任务在包含分区的每个节点上重复运行,而不是平均分布在节点上。在同一个rdds上重复多次的迭代任务中,效率低下最为明显。 所以我的问题是,Spark如何决定哪个节点具有哪个分区,有没有办法强制将数据移动到其他

  • 我有一个大约 100GB 的数据源,我正在尝试使用日期列对其进行分区。 为了避免分区内出现小块,我添加了一个重新分区(5 ),使每个分区内最多有5个文件: 我的问题是,在我分配的30个执行器中,只有5个在实际运行。最后我得到了我想要的东西(每个分区内有5个文件),但由于只有5个执行器在运行,所以执行时间非常长。 你有什么建议可以让我做得更快吗?

  • 问题内容: 下面的Go代码读取10,000条记录的CSV(时间戳和浮点数),对数据进行一些操作,然后将原始值以及的附加列写入到另一个CSV中。但是,它的运行速度非常慢(例如,数小时,但大部分时间是),我很好奇我可以处理的CSV读取/写入是否效率低下。 我正在寻求帮助,以使此CSV读/写模板代码尽快。对于此问题的范围,我们不必担心该方法。 问题答案: 您先将文件加载到内存中,然后再对其进行处理,这对

  • 我需要一些帮助来了解spark如何决定分区的数量,以及它们在executors中是如何处理的,我很抱歉这个问题,因为我知道这是一个重复的问题,但即使在阅读了许多文章后,我仍然不能理解我正在放上一个我目前正在工作的真实生活用例,以及我的Spark提交配置和集群配置。 我的硬件配置: < code>3节点计算机,总Vcores=30,总内存=320 GB。 我正在使用spark dataframe J