草庐IT

Spark优化

全部标签

Java Apache Spark : Long transformation chains result in quadratic time

我有一个使用ApacheSpark的Java程序。该程序最有趣的部分如下所示:longseed=System.nanoTime();JavaRDDannotated=documents.mapPartitionsWithIndex(newInitialAnnotater(seed),true);annotated.cache();for(intiter=0;itera.sum(b));//updateoverallcounts(*)seed=System.nanoTime();//copyoverallcountswhichCountChangerusestocomputeastoch

java - 编译器会优化重复的数学计算吗?

Java编译器是否会优化简单的重复数学运算,例如:if(prevX/width!=curX/width){//DosomethingwithprevX/widthvalue}else{//DosomethingwithcurX/widthvalue}我知道我可以在if语句之前将结果分配给变量,然后返回变量,但这有点麻烦。如果编译器自动识别正在进行相同的计算并自行将结果缓存到临时变量,我宁愿坚持上述约定。*编辑-我是个白痴。我试图简单/抽象我的问题太多。它并不简单:if(x>y) 最佳答案 答案是肯定的。这叫做CommonSubexp

java - 使用 ArrayLists 优化 for 循环

来自this文章,hand-writtencountedloopisabout3xfaster比用于遍历数组列表的增强for循环。首先,“手写计数循环”是什么意思?他们没有明确说明这意味着什么。其次,为什么这只适用于数组列表而不适用于其他集合? 最佳答案 Firstly,whatdotheymeanby"hand-writtencountedloop"?我想他们的意思是for(inti=0;iSecondly,whyisitthatthisholdstrueonlyforarraylistsandnottheothercollect

java - Spark : get number of cluster cores programmatically

我在yarn集群中运行我的spark应用程序。在我的代码中,我使用队列的可用核心数在我的数据集上创建分区:Datasetds=...ds.coalesce(config.getNumberOfCores());我的问题:如何以编程方式而非配置方式获取队列的可用核心数? 最佳答案 有一些方法可以从Spark中获取集群中的执行器数量和核心数量。这是我过去使用过的一些Scala实用程序代码。您应该能够轻松地将其改编为Java。有两个关键思想:worker的数量是executor的数量减一或sc.getExecutorStorageStat

java - 智能 JVM 和 JIT 微优化

随着时间的推移,Sun的JVM和JIT变得非常智能。不再需要过去作为必要的微优化而成为常识的事情,因为它会为您处理。例如,过去的情况是您应该将所有可能的类标记为最终类,以便JVM内联尽可能多的代码。但是现在,JIT会根据运行时加载的类来知道您的类是否是最终类,如果您加载一个类以使原始类成为非最终类,它会取消内联方法并将其取消标记为final。JVM或JIT还为您做了哪些其他智能微优化?编辑:我将其设为社区维基;我想随着时间的推移收集这些。 最佳答案 这太令人印象深刻了。所有这些都是您在C++中不能做的事情(当然在Java中做不到)。

java - 加入数据框 spark java

Firstofall,thankyouforthetimeinreadingmyquestion.Myquestionisthefollowing:InSparkwithJava,iloadintwodataframethedataoftwocsvfiles.Thesedataframeswillhavethefollowinginformation.DataframeAirportId|Name|City-----------------------1|Barajas|MadridDataframeairport_city_stateCity|state---------------

java - org.apache.xbean.asm5.ClassReader 中的 Spark Java IllegalArgumentException

我正在尝试将Spark2.3.1与Java结合使用。我遵循示例inthedocumentation但在调用.fit(trainingData)时不断收到描述不佳的异常。Exceptioninthread"main"java.lang.IllegalArgumentExceptionatorg.apache.xbean.asm5.ClassReader.(UnknownSource)atorg.apache.xbean.asm5.ClassReader.(UnknownSource)atorg.apache.xbean.asm5.ClassReader.(UnknownSource)at

java - 如果我在 Spark 中两次缓存相同的 RDD 会发生什么

我正在构建一个通用函数,它接收一个RDD并对其进行一些计算。由于我在输入RDD上运行了多个计算,所以我想缓存它。例如:publicJavaRDDfoo(JavaRDDr){r.cache();JavaRDDt1=r...//SomecalculationsJavaRDDt2=r...//Othercalculationsreturnt1.union(t2);}我的问题是,因为r给我它可能已经或可能没有被缓存。如果它被缓存并且我再次对其调用缓存,将创建一个新的缓存层,这意味着t1和t2计算出我将有两个r的实例在缓存中?或者willspark会意识到r被缓存并会忽略它?

java - 如何使用 java 从 Spark 中的列表或数组创建行

在Java中,我使用RowFactory.create()来创建行:Rowrow=RowFactory.create(record.getLong(1),record.getInt(2),record.getString(3));其中“record”是数据库中的一条记录,但我无法预先知道“record”的长度,所以我想使用一个列表或一个数组来创建“行”。在Scala中,我可以使用Row.fromSeq()从列表或数组创建行,但我如何在Java中实现这一点? 最佳答案 我们经常需要在现实世界的应用程序中创建数据集或数据帧。以下是如何在

java - 请求的路由还没有映射到 Spark 中

我想做点什么用spark+java+hibernate+postgres注册用户这是我的代码:post("/registrar",(request,response)->{EntityManagerFactoryemf=Persistence.createEntityManagerFactory("compradorcitoPU");EntityManagerem=emf.createEntityManager();em.getTransaction().begin();em.persist(u);em.getTransaction().commit();em.close();retu