小编Chr*_*oth的帖子

Scala隐式类型转换的性能影响是什么?

在Scala中,使用隐式类型转换来增强类的功能与其他可能的实现选择相比,是否存在显着的CPU或内存影响?

例如,考虑一个愚蠢的字符串操作函数.此实现使用字符串连接:

object Funky {
  def main(args: Array[String]) {
    args foreach(arg => println("Funky " + arg))
  }
}
Run Code Online (Sandbox Code Playgroud)

此实现通过使用隐式类型转换隐藏成员方法背后的串联:

class FunkyString(str: String) {
  def funkify() = "Funky " + str
}

object ImplicitFunky {
  implicit def asFunkyString(str: String) = new FunkyString(str)

  def main(args: Array[String]) {
    args foreach(arg => println(arg.funkify()))
  }
}
Run Code Online (Sandbox Code Playgroud)

两者都做同样的事情:

scala> Funky.main(Array("Cold Medina", "Town", "Drummer"))        
Funky Cold Medina
Funky Town
Funky Drummer

scala> ImplicitFunky.main(Array("Cold Medina", "Town", "Drummer"))
Funky Cold Medina
Funky Town
Funky Drummer
Run Code Online (Sandbox Code Playgroud)

有任何性能差异吗?一些具体的考虑因素:

Scala是否内联对asFunkyString方法的隐式调用?

Scala实际上是为每个arg创建一个新的包装器FunkyString对象,还是可以优化掉额外的对象分配?

假设FunkyString有3种不同的方法(funkify1,funkify2和funkify3),并且foreach的主体连续调用每个方法: …

performance scala implicit-conversion

33
推荐指数
2
解决办法
3210
查看次数

我应该在hadoop上的每个动作之前调用ugi.checkTGTAndReloginFromKeytab()吗?

在我的服务器应用程序中,我从我的Java应用程序连接到Kerberos安全的Hadoop集群.我正在使用各种组件,如HDFS文件系统,Oozie,Hive等.在应用程序启动时,我打电话

UserGroupInformation.loginUserFromKeytabAndReturnUGI( ... );
Run Code Online (Sandbox Code Playgroud)

这将返回我的UserGroupInformation实例,并将其保留为应用程序生命周期.在执行特权操作时,我将其启动ugi.doAs(action).

这工作正常,但我想知道是否以及何时更新kerberos票UserGroupInformation?我找到了一种方法UserGroupInformation.checkTGTAndReloginFromKeytab(),似乎只要它接近到期就会更新机票.我还发现这种方法正在被各种Hadoop工具调用WebHdfsFileSystem,例如.

现在,如果我希望我的服务器应用程序(可能运行数月甚至数年)永远不会体验票证过期,那么最佳方法是什么?提出具体问题:

  1. 我可以依赖他们checkTGTAndReloginFromKeytab在需要时调用的各种Hadoop客户端吗?
  2. 我应该checkTGTAndReloginFromKeytab在我的代码中自己打电话吗?
  3. 如果是这样,我应该在每次打电话ugi.doAs(...)或者更确切地设置定时器之前这样做并定期调用它(多久一次)?

java hadoop kerberos

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

AWS Athena MSCK REPAIR TABLE对于小型数据集来说需要太长时间

我遇到了amazon athena的问题,我有一个小桶(36430个对象,9.7 mb),有4级分区(my-bucket/p1 = ab/p2 = cd/p3 = ef/p4 = gh/file.csv)但是当我运行命令时

MSCK REPAIR TABLE db.table

我花了超过25分钟,我计划在Athena上放置结核病的数据,如果这个问题仍然存在,我将不会这样做

有谁知道为什么要花太长时间?

提前致谢

hive amazon-s3 amazon-web-services amazon-athena

7
推荐指数
2
解决办法
2658
查看次数

如何从Scala代码中读取HDFS文件

我是Scala和HDFS的新手:

我只是想知道我能够从Scala代码读取本地文件但是如何从HDFS读取:

import scala.io.source
object ReadLine {
  def main(args:Array[String]) {
    if (args.length>0) {
      for (line <- Source.fromLine(args(0)).getLine())
        println(line)
      }
    }
Run Code Online (Sandbox Code Playgroud)

在论证中我已经过了hdfs://localhost:9000/usr/local/log_data/file1..但是它的给出FileNotFoundException错误我肯定错过了一些东西..任何人都可以帮助我吗?

hadoop scala

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

类和继承的集合

我希望有一个特定子类的Class'es集合来实现这样的事情:

public class Test {
    private class Parent {}
    private class Child1 extends Parent{}
    private class Child2 extends Parent{}

    List<Class<Parent>> classes = new ArrayList();

    public Test() {
        classes.add(Child1.class); 
    }

    public static void main(String[] args) {
        new Test();

    }
}
Run Code Online (Sandbox Code Playgroud)

如何在不扰乱编译器的情况下实现上述目的?

java generics covariance

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

如何在Java/Scala中中断提交给newSingleThreadExecutor的线程?

鉴于我有以下测试代码:

import java.util.concurrent._

object TestTime {
  def main(args: Array[String]) {
    println("starting....")
    val service = Executors.newSingleThreadExecutor
    val r = new Callable[Unit]() {
      override def call(): Unit = {
        //your task
        val t0 = System.nanoTime
        val total = sum(1000000000)
        val t1 = System.nanoTime
        println("Elapsed time " + (t1 - t0) / 1e9 + " secs")
        println(s"total = $total")
      }
    }
    val f = service.submit(r)
    try {
      // attempt the task for 2 second
      f.get(2, TimeUnit.SECONDS)
    } catch {
      case _: TimeoutException => …
Run Code Online (Sandbox Code Playgroud)

java multithreading scala

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