小编sum*_*tsu的帖子

Java Generics:使用嵌套通配符参数进行赋值

对于以下代码示例:

public static class Abc<X> { }
public static class Def<Y> { }
public static class Ghi<Z> { }

public void doThis() {
    List<?> listOne;
    List<Abc<?>> listTwo;
    List<Abc<Def<?>>> listThree;
    List<Abc<Def<Ghi<?>>>> listFour;
    List<Abc<Def<Ghi<String>>>> listFive;

    Abc<Def<Ghi<String>>> abcdef;

    abcdef = new Abc<Def<Ghi<String>>>();

    listOne.add(abcdef);    // line 1
    listTwo.add(abcdef);    // line 2
    listThree.add(abcdef);  // line 3
    listFour.add(abcdef);   // line 4
    listFive.add(abcdef);   // line 5
}
Run Code Online (Sandbox Code Playgroud)

第1,3和4行不编译:

(第1行)

The method add(capture#1-of ?) in the type List<capture#1-of ?> is not applicable for the arguments (Abc<Def<Ghi<String>>>)
Run Code Online (Sandbox Code Playgroud)

(第3行)

The …
Run Code Online (Sandbox Code Playgroud)

java generics nested-generics type-parameter

12
推荐指数
1
解决办法
834
查看次数

强制Gradle使用较早的依赖版本进行测试

有没有一种方法可以构建Gradle构建文件,以强制测试阶段使用比用于编译和打包的依赖关系更早的依赖关系版本?

我正在尝试通过HBaseTestingUtility建立一个HBase迷你集群来测试我的项目。不幸的是,HBaseTestingUtility依赖于旧版本的Guava(似乎可以使用14.0.1),而我项目的其余部分则使用18.0。这是我的构建脚本的摘录,原样(我还使用Unbroken-domeGradle测试集插件来创建两组独立的测试):

plugins {
    id 'org.unbroken-dome.test-sets' version '1.2.0'
}

apply plugin: 'java'

ext.verGuava = '18.0'
ext.verGuavaTEST = '14.0.1'

testSets {
    testUnit { dirName = 'test/unit' }
    testIntegration { dirName = 'test/integration' }
}

configurations {
    provided
    provided {
        extendsFrom(compile)
    }
    testIntConf
    testIntConf {
        extendsFrom(provided)
        resolutionStrategy {
            force "com.google.guava:guava:${verGuavaTEST}"
            forcedModules = ["com.google.guava:guava:${verGuavaTEST}"]
        }
    }
}

sourceSets {
    main.compileClasspath += configurations.provided
    testUnit.compileClasspath += configurations.provided
    testUnit.runtimeClasspath += configurations.provided
    testIntegration.compileClasspath += configurations.testIntConf
    testIntegration.runtimeClasspath += configurations.testIntConf
}

dependencies { …
Run Code Online (Sandbox Code Playgroud)

java dependency-management gradle build.gradle

5
推荐指数
1
解决办法
2147
查看次数

HBase是否每行施加最大尺寸?

高级别问题:

HBase是否强制每行的最大大小,这对于所有分布都是通用的(因此不是实现的工件),无论是存储字节还是以单元数量表示

如果是这样:

  • 限制是多少?

  • 限制存在的原因是什么?

  • 记录的限制在哪里?

如果不:

  • 文档(或测试结果)是否可用于证明HBase处理超过2GB行的能力?4GB?

  • 是否存在实际或"最佳实践"最大值,HBase API用户应保持行大小以避免严重的性能下降?如果是这样,如果丢弃该指导,会出现什么样的性能下降?

在任一情况下:

  • 答案是否取决于相关的HBase版本?

背景:

hbase mapr

3
推荐指数
1
解决办法
4245
查看次数

Spark RDD:如何最有效地计算统计数据?

假设存在类似于以下元组的 RDD:

(key1, 1)
(key3, 9)
(key2, 3)
(key1, 4)
(key1, 5)
(key3, 2)
(key2, 7)
...
Run Code Online (Sandbox Code Playgroud)

计算与每个键对应的统计信息的最有效(并且理想情况下是分布式)方法是什么?(目前,我希望计算标准偏差/方差,特别是。)据我所知,我的选择是:

  1. 使用colStatsMLLib 中函数mllib.stat如果认为需要其他统计计算,这种方法的优点是易于适应以后使用其他函数。但是,它在Vector包含每列数据的 RDD 上运行,据我所知,这种方法需要在单个节点上收集每个键的完整值集,这对于大数据来说似乎并不理想套。Spark 是否Vector总是暗示数据在Vector本地驻留在单个节点上?
  2. 执行 a groupByKey, then stats:由于groupByKey操作的结果,可能是重洗牌。
  3. Perform aggregateByKey,初始化一个 new StatCounter,并StatCounter::merge用作序列和组合器函数:这是StackOverflow answer 推荐的方法,避免了groupByKeyfrom 选项 2。但是,我StatCounter在 PySpark 中找不到好的文档。

我喜欢选项 1,因为它使代码更具可扩展性,因为它可以使用其他具有类似合约的 MLLib 函数轻松适应更复杂的计算,但是如果Vector输入本身要求在本地收集数据集,那么它会限制数据大小哪些代码可以有效运行。在其他两个之间,选项 3看起来更有效,因为它避免了groupByKey,但我希望确认情况确实如此。

还有其他我没有考虑过的选择吗?(我目前正在使用 …

distributed-computing apache-spark rdd pyspark apache-spark-mllib

2
推荐指数
1
解决办法
4148
查看次数

Scala:惯用的Try-match并避免抓到Throwable

在Scala中,模式匹配在异常处理中的典型用法(至少对于像thisthis这样的源而言)如下所示:

Try(...) match {
  case Success(_) => println("success")
  case Failure(exc) => println(s"caught: $exc")
}
Run Code Online (Sandbox Code Playgroud)

但是,该模式也可以捕获块中Exception Throwable抛出的所有非变量try

Try(throw new AssertionError("assertion error")) match {
  case Success(_) => println("success")
  case Failure(exc) => println(s"caught: $exc")
}

caught: java.lang.AssertionError: assertion error
Run Code Online (Sandbox Code Playgroud)

至少在Java中,至少在Throwable没有令人信服的理由的情况下进行捕获通常被认为是一种反模式。(此消息源为Scala提供了相同的建议。)

避免无声捕获的一种选择Throwable是捕获并重新抛出它:

Try(throw new AssertionError("assertion error")) match {
  case Success(_) => println("success")
  case Failure(exc : Exception) => println(s"caught: $exc")
  case Failure(th) => throw th
}
Run Code Online (Sandbox Code Playgroud)

但是,似乎很奇怪,必须进行额外的重新抛出来避免捕获非Exception Throwables(通常认为是不可恢复的),并且必须明确实现Throwable …

scala exception-handling throwable

1
推荐指数
1
解决办法
2174
查看次数