小编Lei*_*and的帖子

如何使用IntelliJ Idea创建SBT项目?

我刚开始使用Scala/LiftWeb/Sbt开发,我想在IntelliJ Idea中导入一个Sbt项目.实际上,我设法以两种不同的方式导入我的项目:

1)与Maven.我创建了一个Maven项目,最重要的是我创建了一个Sbt项目,然后我在IntelliJ中导入了该项目.然后我可以轻松启动,停止Jetty服务器,并做其他的事情.但这不是我想要的.我想做同样的事情,只是Maven-free.这导致我

2)使用Eclipse.所以,我创建了一个新的Sbt项目(我编写了一个小脚本,将Sbt项目配置为WebProject).然后我使用sbt-eclipsify插件来"转换"Eclipse的项目,然后我在IntelliJ中导入(现有的源 - > eclipse).但是问题从这里开始:我无法使用IntelliJ Sbt插件.

谁能帮我这个?

scala lift intellij-idea sbt

146
推荐指数
4
解决办法
7万
查看次数

Stream vs Views vs Iterators

scala中的Streams,Views(SeqView)和迭代器之间有什么区别?这是我的理解:

  • 他们都是懒惰的名单.
  • Streams缓存值.
  • 迭代器只能使用一次?你不能回到开始并再次评估价值?
  • View的值不会被缓存,但您可以反复评估它们?

所以,如果我想节省堆空间,我应该使用迭代器(如果我不再遍历列表)或视图?谢谢.

scala scala-collections

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

识别并描述Scala的泛型类型约束

我见过"<:"和">:"和"<%"等,有人能给(或找到)这些的好描述吗?有什么可能的限制,他们做了什么,以及什么时候使用它们的例子?

generics scala

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

如何将Scala构造函数参数公开为公共成员?

看看这个例子:

class Point(x: Double, y: Double){
  override def toString = "x: " + x + ", y: " + y
  def +(sourcePoint: Point) : Point = {
    return new Point(x + sourcePoint.x, y + sourcePoint.y
  }
}
Run Code Online (Sandbox Code Playgroud)

如您所见,我想+在Point类上定义一个运算符方法.但是,这不会在方法,因为工作,xy不能在访问sourcePoint局部变量,因为它们是私有的,所以我改变的例子为这样的:

class Point(_x: Double, _y: Double){
  var x = _x
  var y = _y

  override def toString = "x: " + x + ", y: " + y
  def +(sourcePoint: Point) : Point = { …
Run Code Online (Sandbox Code Playgroud)

scala

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

我是否可以获得所有案例对象的编译时列表,这些案例对象派生自Scala中的密封父代?

正如在SO上多次讨论的那样,如果你没有详尽地列出从密封类派生的所有类型,Scala匹配将警告你.

我想要的是编译时生成的Iterable来自特定父级的案例对象.或者,我很高兴有一种方法可以让编译器告诉我在某些Iterable中没有所有必要的类型.我不想要一个基于反射的运行时方法.

作为第二种方法的一个例子,我想让下面的粗略代码生成一个编译错误.

sealed trait Parent
case object A extends Parent
case object B extends Parent
case object C extends Parent

// I want a compiler error here because C is not included in the Seq()
val m = Seq(A, B).map(somethingUseful)
Run Code Online (Sandbox Code Playgroud)

请告诉我这是不可能的,随意回答.它似乎应该在某种程度上是可能的,因为在确定匹配是非详尽的时,编译器必须完成基本相同的工作.

再考虑一下,除了应用于case对象之外,我会采用类似Enumeration.values()方法的方法.当然,我可以添加一些类似于上面代码的东西,并将一个手动维护的值列表添加到父对象的对象中,但是当编译器可以为我做这件事时,这似乎不必要地容易出错.

// Manually maintained list of values
object Parent { 
    val values = Seq(A, B, C)
}
Run Code Online (Sandbox Code Playgroud)

scala

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

如何修复"任务尝试_201104251139_0295_r_000006_0无法报告状态600秒".

我写了一个mapreduce作业来从数据集中提取一些信息.数据集是用户对电影的评分.用户数约为250K,电影数约为300k.地图的输出是<user, <movie, rating>*> and <movie,<user,rating>*>.在reducer中,我将处理这些对.

但是当我运行这个工作时,映射器按预期完成,但是reducer总是抱怨

Task attempt_* failed to report status for 600 seconds.
Run Code Online (Sandbox Code Playgroud)

我知道这是由于无法更新状态,所以我context.progress()在我的代码中添加了一个调用,如下所示:

int count = 0;
while (values.hasNext()) {
  if (count++ % 100 == 0) {
    context.progress();
  }
  /*other code here*/
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,这没有帮助.仍有许多减少任务失败.

这是日志:

Task attempt_201104251139_0295_r_000014_1 failed to report status for 600 seconds. Killing!
11/05/03 10:09:09 INFO mapred.JobClient: Task Id : attempt_201104251139_0295_r_000012_1, Status : FAILED
Task attempt_201104251139_0295_r_000012_1 failed to report status for 600 seconds. Killing!
11/05/03 10:09:09 INFO mapred.JobClient: Task Id : …
Run Code Online (Sandbox Code Playgroud)

hadoop mapreduce

24
推荐指数
3
解决办法
4万
查看次数

从Eclipse运行SBT Task

我使用SBT作为构建管理器,Ec​​lipse作为我的IDE,或者至少我想要.问题是,如何从Eclipse运行特定的SBT任务.我已经将项目正确地导出到了Eclipse,Eclipse在编写代码时非常有用,但是我如何使用Eclipse作为SBT的前端.如何从eclipse启动SBT运行命令?如何启动SBT测试命令?

eclipse plugins scala sbt scala-ide

20
推荐指数
2
解决办法
9139
查看次数

如何压扁嵌套元组?

我有一个嵌套的元组结构(String,(String,Double)),我想将其转换为(String,String,Double).我有各种嵌套元组,我不想手动转换每个元组.有没有方便的方法呢?

scala tuples flatten

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

使用Kryo序列化时为什么Spark表现更差?

我为我的Spark作业启用了Kryo序列化,启用了设置以要求注册,并确保我的所有类型都已注册.

val conf = new SparkConf()
conf.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer")
conf.set("spark.kryo.registrationRequired", "true")
conf.registerKryoClasses(classes)
conf.registerAvroSchemas(avroSchemas: _*)
Run Code Online (Sandbox Code Playgroud)

作业的Wallclock-time性能恶化了大约20%,并且洗牌的字节数增加了近400%.

鉴于Spark文档建议Kryo应该更好,这对我来说似乎真的很令人惊讶.

Kryo比Java序列化更快,更紧凑(通常高达10倍)

我手动调用serializeSpark的实例上的方法org.apache.spark.serializer.KryoSerializerorg.apache.spark.serializer.JavaSerializer我的数据示例.结果与Spark文档中的建议一致:Kryo生成了98个字节; Java产生了993个字节.这确实是10倍的改进.

一个可能混淆的因素是被序列化和混洗的对象实现了Avro GenericRecord接口.我尝试注册Avro架构SparkConf,但没有显示出任何改进.

我尝试制作新的类来改组简单的Scala数据case class,不包括任何Avro机器.它没有改善shuffle性能或交换的字节数.

Spark代码最终沸腾到以下:

case class A(
    f1: Long,
    f2: Option[Long],
    f3: Int,
    f4: Int,
    f5: Option[String],
    f6: Option[Int],
    f7: Option[String],
    f8: Option[Int],
    f9: Option[Int],
    f10: Option[Int],
    f11: Option[Int],
    f12: String,
    f13: Option[Double],
    f14: Option[Int],
    f15: Option[Double],
    f16: Option[Double],
    f17: List[String],
    f18: String) extends org.apache.avro.specific.SpecificRecordBase {
  def get(f: …
Run Code Online (Sandbox Code Playgroud)

performance scala avro apache-spark

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

如何自动格式化sbt构建文件?

我想用scalariform格式化我的sbt构建文件.在启动sbt时,是否可以在构建定义本身上运行标量?

scala sbt scalariform

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