在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的主体连续调用每个方法: …
在我的服务器应用程序中,我从我的Java应用程序连接到Kerberos安全的Hadoop集群.我正在使用各种组件,如HDFS文件系统,Oozie,Hive等.在应用程序启动时,我打电话
UserGroupInformation.loginUserFromKeytabAndReturnUGI( ... );
Run Code Online (Sandbox Code Playgroud)
这将返回我的UserGroupInformation实例,并将其保留为应用程序生命周期.在执行特权操作时,我将其启动ugi.doAs(action).
这工作正常,但我想知道是否以及何时更新kerberos票UserGroupInformation?我找到了一种方法UserGroupInformation.checkTGTAndReloginFromKeytab(),似乎只要它接近到期就会更新机票.我还发现这种方法正在被各种Hadoop工具调用WebHdfsFileSystem,例如.
现在,如果我希望我的服务器应用程序(可能运行数月甚至数年)永远不会体验票证过期,那么最佳方法是什么?提出具体问题:
checkTGTAndReloginFromKeytab在需要时调用的各种Hadoop客户端吗? checkTGTAndReloginFromKeytab在我的代码中自己打电话吗?ugi.doAs(...)或者更确切地设置定时器之前这样做并定期调用它(多久一次)?我遇到了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上放置结核病的数据,如果这个问题仍然存在,我将不会这样做
有谁知道为什么要花太长时间?
提前致谢
我是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错误我肯定错过了一些东西..任何人都可以帮助我吗?
我希望有一个特定子类的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)
如何在不扰乱编译器的情况下实现上述目的?
鉴于我有以下测试代码:
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 ×3
scala ×3
hadoop ×2
amazon-s3 ×1
covariance ×1
generics ×1
hive ×1
kerberos ×1
performance ×1