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

如何在Spark DataFrame中按查询优化group?

李勇
2023-03-14

我有一个Spark作业,它使用以下分组查询。我知道group by是邪恶的,但在我的用例中我无法避免它。我尝试使用数据帧和hiveContext来使用它。sql()但这两种方法都会洗牌大量数据,而且速度非常慢:一个查询大约需要5分钟。我曾看到一组按阶段执行20 GB的随机读取和10 GB的随机写入。我有大约8个字段按字段分组传入

sourceFrame.select("blabla").groupby("col1","col2","col3",..."col8").agg("bla bla"); 

hiveContext.sql("insert into table partitions bla bla group by "col1","col2","col3",..."col8""); 

我已经尝试了几乎所有的调谐参数,如钨丝、lz4等。洗牌memoryFraction约为0.6。Spark UI中按阶段分组的大多数时间都会等待无序读取,甚至会在那里挂上几个小时。我正在使用Spark 1.4.0。

共有1个答案

弓举
2023-03-14

reduceByKey是groupBy的替代选项,但您需要将数据帧转换为RDD。我有类似的问题,但我用df解决了。rdd,然后使用reduceByKey

 类似资料:
  • 问题内容: 我有一个查询,使用带通配符的“ like”来搜索客户端。例如: 它还可以在“ where”子句中使用较少的参数,例如: 谁能说出优化这种查询性能的最佳方法是什么?也许我需要创建一个索引?该表在生产中最多可以有1000K条记录。 问题答案: 要在模式具有表单的位置上做很多事情,您需要查找SQL Server的全文本索引功能,并使用代替。照原样,您正在执行全表扫描,因为普通索引对搜索以通配

  • 问题内容: 我希望从我的用户模型中检索一些信息,如下所示: 在主页中,我有一个 位置 过滤器,您可以在其中浏览来自国家或城市的用户。 所有字段还包含其中的用户数: 在主页上,然后我还有“学生和老师”页面,我希望仅提供有关这些国家和城市有多少老师的信息… 我想做的是创建一个对MongoDB的查询,以通过单个查询检索所有这些信息。 此刻查询如下: 问题是我不知道如何获取所需的所有信息。 我不知道如何获

  • 问题内容: 此查询需要153秒才能运行。中有数百万行。 我认为查询要花很长时间,因为where子句中的功能。但是,我需要在列上执行ltrim rtrim,而且日期也必须在格式上匹配。如何优化此查询? 说明计划: 首要的关键: 索引: 但是,在解释计划中,我看不到使用索引/主键。那是问题吗? 问题答案: 试试这个: 如果尚无时间,请从其外观(出生日期?)上删除该对象。除此之外,您还需要一些索引工作。

  • 问题内容: (这是SQL连接时线程的django版本:选择一对多关系中的最后一个记录) 假设我有一个客户表和一个采购表。每次购买都属于一个客户。我想获得所有客户的清单以及他们的上一次购买。是否可以在没有原始SQL且没有多个数据库查询的情况下完成? 问题答案: 您可以看一下类似的讨论: 从不同类别获取最新对象的Django查询 据我所知,在Django ORM中没有单步执行此操作的方法。 但是您可以

  • 问题内容: 有此表: 我们想优化以下查询: 该表是InnoDB,(因此暂时没有FULLTEXT),这将是优化此类查询的最佳索引? 我们尝试了一个简单的方法: 但是一个解释性查询表明, 如果我们的查询在“像%%”这样的地方查询,则需要扫描 整个表 ,该索引表现良好,但否则就没有价值。 无论如何,有没有为innoDB优化呢? 谢谢! 问题答案: 索引是从字符串的开头到结尾建立的。使用type子句时,M

  • 问题内容: 这就是整个查询… 如果… 和… 有明显的理由吗? 正在服用? 扩展说明 问题答案: 您可以始终使用EXPLAIN或EXPLAIN EXTENDED 来查看MySql对查询所做的操作 您也可以用稍微不同的方式编写查询,是否尝试过以下方法? 看看效果如何会很有趣。我希望它会更快,因为目前,我认为MySql将为您拥有的每个节目运行内部查询1(这样一个查询将运行多次。联接应该更有效。) 如果希