Tag: scala

使用mapPartition和迭代器保存spark RDD

我有一些中间数据,我需要存储在HDFS和本地。 我正在使用Spark 1.6。 在HDFS中作为中间forms我在/output/testDummy/part-00000和/output/testDummy/part-00001获取数据。 我想使用Java / Scala将这些分区保存在本地,以便我可以将它们保存为/users/home/indexes/index.nt (通过在本地合并)或/users/home/indexes/index-0000.nt和/home/indexes/index-0001.nt分开。 这是我的代码:注意:testDummy与test相同,输出有两个分区。 我想单独存储它们或组合它们但是本地与index.nt文件。 我更喜欢分别存储在两个数据节点中。 我正在使用集群并在YARN上提交spark工作。 我还添加了一些评论,多少次以及我得到的数据。 我该怎么办? 任何帮助表示赞赏。 val testDummy = outputFlatMapTuples.coalesce(Constants.INITIAL_PARTITIONS).saveAsTextFile(outputFilePathForHDFS+”/testDummy”) println(“testDummy done”) //1 time print def savesData(iterator: Iterator[(String)]): Iterator[(String)] = { println(“Inside savesData”) // now 4 times when coalesce(Constants.INITIAL_PARTITIONS)=2 println(“iter size”+iterator.size) // 2 735 2 735 values val filenamesWithExtension = outputPath + “/index.nt” println(“filenamesWithExtension “+filenamesWithExtension.length) //4 […]

用于共享大型不可变对象的工厂/缓存策略

我的问题很像以前的postOptimal HashSet Initialization(Scala | Java) ,我想使用HashSet加速(目前我正在使用Set ),但HashSet没有表现出它的(恒定时间)优势。 对于提到的解决方案: 您可以通过实习来最小化等于的成本。 这意味着您通过工厂方法获取类的新对象,该方法检查所请求的新对象是否已存在,如果是,则返回对现有对象的引用。 如果断言此类型的每个对象都是以这种方式构造的,那么您就知道每个不同对象只有一个实例,而equals等同于对象标识,这是一个廉价的引用比较(Scala中的eq)。 但是,我不太清楚检查的有效方法是什么 请求的新对象是否已存在 对于大对象(例如,带有hashmap参数的case类的对象,一些其他对象结构……等) 通过比较每个复杂的领域不会给出太多的性能优势,不是吗? 或者如果是,还有其他方法吗? 另外,我也很困惑如何制作 equals等同于对象标识,这是一个廉价的参考比较(Scala中的eq)。 在代码中。 我认为,上面提到的intening技术基本上是一个对象缓存。 因此,我参考了Java中小型不可变对象的后缓存策略中提到的技术? 。 但是,我仍然没有看到大型物体的有效方式。 为方便起见,我引用了post中的缓存技术(用Java), ///表示我的想法和问题: private static final int N_POINTS = 10191; private static final Point[] POINTS = new Point[N_POINTS]; public static Point of(int x, int y, int z) { int h = hash(x,y,z); /// […]

在Scala中Drools Expert输出对象

我是Scala和Drools Expert的新手,需要一些帮助才能从Drools会话中获取信息。 我已经成功设置了一些被Drools规则操纵的Scala类。 现在我想创建一个对象来存储一组输出事实,以便在Drools之外进行处理。 这就是我所拥有的。 我有一个简单的对象存储数字结果(在规则的RHS中生成),以及注释字符串: class TestResults { val results = new MutableList[(Float, String)]() def add(cost: Float, comment: String) { results += Tuple2(cost, comment) } } 在DRL文件中,我有以下内容: import my.domain.app.TestResults global TestResults results rule “always” dialect “mvel” when // then System.out.println(“75 (fixed)”) results.add(75, “fixed”) end 当我运行包含此代码的代码时,我收到以下错误: org.drools.runtime.rule.ConsequenceException: rule: always at org.drools.runtime.rule.impl.DefaultConsequenceExceptionHandler.handleException(DefaultConsequenceExceptionHandler.java:39) … Caused by: [Error: […]

是否建议为Maven项目分离Scala和Java源文件?

我一直在研究一个完全由Java组成的Maven项目,最近开始将Scala代码混合到其中。 我很惊讶Scala提供的出色表现力,scala-maven-plugin的易用性,特别是Java和Scala之间令人难以置信的互操作性。 但是,我遇到了一个不便; 根据Maven的惯例,Java的源代码进入src/main/java ,而Scala进入src/main/scala 。 我发现它非常麻烦,因为我必须经常来回浏览Java和Scala源文件,每次我必须遍历包目录的深层次结构(我经常关闭选项卡以防止编辑器混乱)。 所以问题是 :是否建议维护单独的目录src/main/java和src/main/scala ? 如果是这样,为什么? 为了增加更多背景知识,我一直在研究Web应用程序框架Wicket,它的惯例是将HTML文件与相应的Java文件放在一起。 如果我们保持目录分离,HTML文件自然也是分开的(我不认为将Scala文件和相应的HTML文件放在不同的目录中是有意义的)。 然后就是“为什么我找不到Foo.html?哦,我正在寻找错误的目录。” 源文件本身很容易通过检查扩展来区分人和机器。 我配置了pom.xml来处理在src/main/java放在一起的Java和Scala,并且它可以工作( 编译和运行 )。 另一方面,分离目录会带来在Java和Scala中定义冲突类的风险,这是一个粗心的错误。 好吧,如果它不仅包含Java,而且还包含Scala,我不想命名目录java 。 但这是我能用来分离目录的唯一一点。 (编辑:我提出了一个解决方法 – 解释;让我们认为java代表Java虚拟机 。这样,如果我们决定使用JNI,那么让src/main/c不矛盾,因为C没有在JVM上运行。) 哦,还有一点; 我的项目不是一个开源项目; 开发便利性比努力遵守惯例更受欢迎。 这个问题的灵感来自于这个答案 。

Scala在访问Java方法时遇到问题

所以,我有一些用Java编写的东西,我想在Scala中扩展它…我遇到的问题是Scala没有看到我需要的方法。 以下是它的设置方式:Player扩展Mob,Mob扩展Entity。 我需要访问未在Mob或Entity中定义的Player中的方法,但Scala认为即使Java存在也不存在。 它可以看到Mob和Entity定义的方法就好了。 此外,我所谈论的所有方法都是非静态的。 那么,我做错了什么,或者这是Scala强加的限制? 编辑 – 这是相关代码: package test import rsca.gs.model.Player object Test { def handle(p:Player): Unit = { p.getActionSender().sendTeleBubble(0, 0, false); } } 玩家类: package rsca.gs.model; // imports public final class Player extends Mob { // Implemented methods (not going to post them, as there are quite a few) // Relevant code […]

Scala中的不变性和线程安全性

我正在阅读实践中的Java并发书,当我读到不变性和线程安全之间的关系时,我试图深入了解。 所以,我发现至少有一个用例,在Java中构造一个不可变类可以导致发布一个非正确构造的对象。 根据此链接,如果类的字段未final解析,则编译器可以重新排序需要完成的语句以构造对象。 实际上,根据此链接,要构建对象,JVM需要执行以下非primefaces操作: 分配一些内存 创建新对象 使用默认值初始化其字段(布尔值为false,其他基元为0,对象为null) 运行构造函数,其中包括运行父构造函数 为新构造的对象分配引用 我的问题是:Scala怎么样? 我知道Scala基于Java的并发模型,因此它基于相同的Java内存模型。 例如, case class es线程安全是否与上述构造问题有关? 谢谢大家。

Scala IDE错误 – 无法找到/加载主类

我正在使用Scala IDE 4.4.1。,使用jdk 8.当我尝试运行scala程序时,收到错误“错误:无法找到或加载主类example.Credit”。

在运行时远程探测Scala / Java应用程序

最近,我觉得需要在我的应用程序中打开一个可以远程登录的端口,并探测一些东西,比如特定结构的内存消耗,打印List的内容等等……这极大地方便了部署的探测运行时解决方案。 但突然之间,我有这种奇怪的感觉,这种远程探测的通用框架应该已经存在。 所以,这里有一个问题:是否有任何库已经为Scala / Java提供了这些function? 我不是在寻找“完全远程调试”解决方案,而是一种简约的方法,可以轻松扩展和探测。

保证6位数的随机数

我必须生成一个6位数的随机数。 以下是我到目前为止所做的守则。 它工作正常,但有时它给7位数代替6位数 。 主要问题是为什么? 如何生成有保证的6位数随机数? val ran = new Random() val code= (100000 + ran.nextInt(999999)).toString

Java Tuple2使用accessor方法和直接调用变量之间的区别

我在我的Java代码中使用Tuple2,我想知道通过getter访问值或直接获取变量之间是否存在差异。 Tuple2 tuple = new Tuple2(“Hello”, “World”); //getting values directly String direct = tuple._1; //using getter String indirect = tuple._1();