Questions tagged «scala»

Scala是主要针对Java虚拟机的通用编程语言。它旨在以简洁,优雅和类型安全的方式表达常见的编程模式,它融合了命令式和功能性编程风格。它的主要特征是:具有类型推断功能的高级静态类型系统;功能类型;模式匹配; 隐式参数和转换;操作符重载;与Java完全互操作性;并发

1
从宏获取带有匿名类方法的结构类型
假设我们要编写一个宏,该宏使用一些类型成员或方法定义一个匿名类,然后使用这些方法创建该类的实例,该实例被静态类型化为结构类型,依此类推。在2.10中的宏系统中是可行的。 0,并且类型成员部分非常简单: object MacroExample extends ReflectionUtils { import scala.language.experimental.macros import scala.reflect.macros.Context def foo(name: String): Any = macro foo_impl def foo_impl(c: Context)(name: c.Expr[String]) = { import c.universe._ val Literal(Constant(lit: String)) = name.tree val anon = newTypeName(c.fresh) c.Expr(Block( ClassDef( Modifiers(Flag.FINAL), anon, Nil, Template( Nil, emptyValDef, List( constructor(c.universe), TypeDef(Modifiers(), newTypeName(lit), Nil, TypeTree(typeOf[Int])) ) …

15
合并两个映射并求和相同键的值的最佳方法?
val map1 = Map(1 -> 9 , 2 -> 20) val map2 = Map(1 -> 100, 3 -> 300) 我想合并它们,并对相同键的值求和。因此结果将是: Map(2->20, 1->109, 3->300) 现在我有2个解决方案: val list = map1.toList ++ map2.toList val merged = list.groupBy ( _._1) .map { case (k,v) => k -> v.map(_._2).sum } 和 val merged = (map1 …
178 scala  map  merge 

5
(为什么)我们需要调用缓存还是坚持使用RDD
从文本文件或集合(或另一个RDD)创建弹性分布式数据集(RDD)时,我们是否需要显式调用“缓存”或“持久”以将RDD数据存储到内存中?还是默认情况下,RDD数据是否以分布式方式存储在内存中? val textFile = sc.textFile("/user/emp.txt") 根据我的理解,在完成上述步骤之后,textFile是一个RDD,并且在节点的所有/某些内存中都可用。 如果是这样,为什么我们需要在textFile RDD上调用“缓存”或“持久”呢?
171 scala  apache-spark  rdd 

3
Scala标识符“隐式”是什么?
我已经看到了implicitly在Scala示例中使用的命名函数。它是什么,如何使用? 这里的例子: scala> sealed trait Foo[T] { def apply(list : List[T]) : Unit }; object Foo { | implicit def stringImpl = new Foo[String] { | def apply(list : List[String]) = println("String") | } | implicit def intImpl = new Foo[Int] { | def apply(list : List[Int]) = println("Int") | …
169 scala  implicits 

13
登录Scala
在Scala应用程序中进行登录的好方法是什么?符合语言哲学,不会使代码混乱,维护成本低且不引人注意的事物。这是一个基本需求列表: 简单 不会使代码混乱。Scala简洁明了。我不希望我的一半代码成为记录语句 可以更改日志格式以适合我的企业日志和监视软件的其余部分 支持日志记录级别(即调试,跟踪,错误) 可以登录到磁盘以及其他目标位置(即套接字,控制台等) 最低配置(如果有) 在容器(即Web服务器)中工作 (可选,但很高兴)作为语言的一部分或作为Maven工件而出现,因此我不必破解我的构建即可使用它 我知道我可以使用现有的Java日志记录解决方案,但是它们在以上至少两项上都失败了,即混乱和配置失败。 多谢您的回覆。
168 logging  scala 

13
Scala将Collection转换为Key-key的最佳方法?
如果我有一个集合c型的T,有一个属性p上T(的类型P,比方说),什么是做一个最好的办法地图通过提取键? val c: Collection[T] val m: Map[P, T] 一种方法如下: m = new HashMap[P, T] c foreach { t => m add (t.getP, t) } 但是现在我需要一张可变的地图。有没有更好的方法可以做到这一点,使它排成一行,而最终得到一个不变的 Map?(显然,可以像在Java中那样将上述内容转换为简单的库实用程序,但我怀疑在Scala中没有必要)

6
Scala的懒惰val的(隐藏)成本是多少?
Scala的一个方便功能是lazy val,其中a的求值val被延迟到必要时(首次访问时)。 当然,lazy val必须有一些开销-Scala必须跟踪某个值是否已经被评估并且评估必须同步,因为多个线程可能会尝试同时首次访问该值。 -的确切成本是多少lazy val-是否存在与a相关联的隐藏布尔标志lazy val以跟踪是否已被评估,确切地同步了什么,还有更多成本吗? 另外,假设我这样做: class Something { lazy val (x, y) = { ... } } 这是就等于拥有两个独立的lazy val小号x和y还是我得到的开销只有一次,一对(x, y)?


8
Scala vs Java,性能和内存?[关闭]
从目前的情况来看,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 我热衷于研究Scala,并提出了一个似乎无法找到答案的基本问题:一般来说,Scala和Java在性能和内存使用方面是否有所不同?

6
在Scala中使用def,val和var
class Person(val name:String,var age:Int ) def person = new Person("Kumar",12) person.age = 20 println(person.age) 这些代码行输出12,即使person.age=20已成功执行。我发现发生这种情况是因为我使用了def in def person = new Person("Kumar",12)。如果我使用var或val,则输出为20。我了解Scala中的默认值为val。这个: def age = 30 age = 45 ...给出编译错误,因为默认情况下为val。为什么上面的第一行行不能正常工作,但是也不会出错?
158 scala 

16
可以异步调用jdbc吗?
我想知道是否有一种方法可以对数据库进行异步调用吗? 例如,假设我有一个很大的请求,需要很长时间来处理,我想发送请求并在请求将返回值时(通过传递侦听器/回调等)接收通知。我不想阻止等待数据库答复。 我不认为使用线程池是一种解决方案,因为它无法扩展,在大量并发请求的情况下,这会产生大量线程。 我们正面临着网络服务器的此类问题,并且已经找到解决方案,方法是使用select / poll / epoll系统调用来避免每个连接只有一个线程。我只是想知道如何在数据库请求中具有类似的功能? 注意:我知道使用FixedThreadPool可能是一个不错的解决方法,但令我惊讶的是,没有人开发出真正异步的系统(无需使用额外的线程)。 **更新** 由于缺少实际可行的解决方案,我决定自己创建一个库(finagle的一部分):finagle-mysql。它基本上解码/解码mysql请求/响应,并在后台使用Finagle / Netty。即使有大量连接,它的扩展性也非常好。

6
将罐子添加到Spark Job-spark-submit
没错,已经讨论了很多。 但是,存在很多歧义和提供的一些答案...包括在jars / executor / driver配置或选项中复制jar引用。 模棱两可和/或省略的细节 含糊不清之后,应为每个选项澄清不清楚和/或省略的细节: ClassPath如何受到影响 司机 执行器(用于正在运行的任务) 都 一点也不 分隔字符:逗号,冒号,分号 如果提供的文件自动分发 用于任务(针对每个执行者) 用于远程驱动程序(如果以群集模式运行) 接受的URI类型:本地文件,hdfs,http等 如果复制到公共位置,则该位置在哪里(hdfs,本地?) 影响的选项: --jars SparkContext.addJar(...) 方法 SparkContext.addFile(...) 方法 --conf spark.driver.extraClassPath=... 要么 --driver-class-path ... --conf spark.driver.extraLibraryPath=..., 要么 --driver-library-path ... --conf spark.executor.extraClassPath=... --conf spark.executor.extraLibraryPath=... 不要忘记,spark-submit的最后一个参数也是.jar文件。 我知道在哪里可以找到主要的spark文档,尤其是有关如何提交,可用的选项以及JavaDoc的信息。但是,这仍然给我留下了很多空白,尽管它也可以部分解决。 我希望这不是那么复杂,并且有人可以给我一个清晰简洁的答案。 如果我从文档中猜测,似乎--jars和SparkContext addJar和addFile方法都是将自动分发文件的方法,而其他选项仅修改了ClassPath。 为了简单起见,可以安全地假设我可以同时使用3个主要选项添加其他应用程序jar文件: spark-submit --jar additional1.jar,additional2.jar \ --driver-library-path …



14
是什么使Scala的运算符重载“好”,而C ++的“坏”?
许多人认为C ++中的运算符重载是一个坏东西(tm),并且是一个错误,不要在较新的语言中重复出现。当然,这是设计Java时专门删除的一项功能。 既然我已经开始阅读Scala,我发现它看起来非常类似于运算符重载(尽管从技术上讲,它没有运算符重载,因为它没有运算符,只有函数)。但是,它似乎与C ++中的运算符重载在质量上没有什么不同,在C ++中,我记得运算符被定义为特殊函数。 因此,我的问题是什么使Scala中定义“ +”的想法比C ++中的想法更好?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.