我javaHiveContext
在Spark中执行联接。
大表是1,76Gb,拥有1亿条记录。
第二个表为273Mb,记录为1000万。
我得到一个,JavaSchemaRDD
并呼吁count():
String query="select attribute7,count(*) from ft,dt where ft.chiavedt=dt.chiavedt group by attribute7";
JavaSchemaRDD rdd=sqlContext.sql(query);
System.out.println("count="+rdd.count());
如果我强制abroadcastHashJoin (SET spark.sql.autoBroadcastJoinThreshold=290000000)
并在具有8个核心和20Gb内存的5个节点上使用5个执行程序,则它将在100秒内执行。如果我不强制播放,它将在30秒内执行。
注意,表存储为Parquet文件。
问题的根源很可能是广播成本。为了简单起见,假设您在较大的RDD中有1800MB,在较小的RDD中有300MB。假设有5个执行者并且没有以前的分区,则所有数据的五分之一应该已经在正确的机器上。在标准连接的情况下,它剩下约1700MB的空间用于改组。
为了进行广播连接,必须将较小的RDD传输到所有节点。这意味着大约有1500MB的数据要传输。如果添加了与驱动程序的必需通信,则意味着必须以昂贵得多的方式移动相当数量的数据。必须首先收集广播的数据,然后才能将其转发给所有工作人员。
2)在火花中: 同样的,在Spark中需要30秒,在Python中需要1秒。 我的Spark比纯Python慢得多的几个可能原因:
问题内容: 下面是分别用和编码的简单过程(对于那些对此过程感到好奇的人,这是针对Euler项目5号问题的解决方案)。 我的问题是,下面的代码仅需9秒即可迭代,而代码完成则需要283秒(确切地说,在Python 3.4.3-64位上为283秒,在Python 2.7.9-32位上为329秒)。 到目前为止,我已经编码的两种类似的过程和与执行时间的差异,具有可比性。但是,这次,经过的时间之间存在极大的
问题内容: 我有一堂课,我已经简化为: 我想对这个东西进行排序。所以我创建了一个简单的copmarator: 然后,我使用的两个参数形式。 这对于我的测试用例来说很好用,但是有时由于数组以奇怪但可重复的顺序结束而完全出错。怎么会这样? 问题答案: 整数溢出…或更确切地说是下溢。 相反,进行显式比较: 如果您确定差异不会“绕回”,则可以使用减法。例如,当所讨论的值被约束为非负数时。
内置函数是否低效地执行序列化/反序列化过程?如果是,有哪些替代方案? 数据集是否太小,以至于无法超过运行spark的底层JVM的开销? 谢谢你找我。非常感谢。
问题内容: 检查问题此SELECT查询需要180秒才能完成(检查问题本身的注释)。 IN只能与一个值进行比较,但是时间差仍然很大。 为什么会这样呢? 问题答案: 简介:这是MySQL中的一个已知问题,已在MySQL 5.6.x中修复。问题是由于使用IN的子查询被错误地标识为从属子查询而不是独立子查询时缺少优化。 在原始查询上运行EXPLAIN时,它将返回以下内容: 当您更改为以下内容时: 每个相关
如果我在Rust中运行这些基准测试: 结果是: 每次通话121-6=115纳秒。 但Java的基准相同: 给我: Rust中的原木速度约为Java中的3.7倍(115/31)。 当我测试斜边实现()时,Rust中的实现速度是Java中的15.8倍。 我是否编写了糟糕的基准测试,或者这是一个性能问题? 回复评论中提出的问题: > 我使用总是在发布模式下运行的运行Rust的基准测试。 Java基准测试