我刚开始使用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中的Streams,Views(SeqView)和迭代器之间有什么区别?这是我的理解:
所以,如果我想节省堆空间,我应该使用迭代器(如果我不再遍历列表)或视图?谢谢.
我见过"<:"和">:"和"<%"等,有人能给(或找到)这些的好描述吗?有什么可能的限制,他们做了什么,以及什么时候使用它们的例子?
看看这个例子:
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类上定义一个运算符方法.但是,这不会在方法,因为工作,x而y不能在访问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) 正如在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) 我写了一个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) 我使用SBT作为构建管理器,Eclipse作为我的IDE,或者至少我想要.问题是,如何从Eclipse运行特定的SBT任务.我已经将项目正确地导出到了Eclipse,Eclipse在编写代码时非常有用,但是我如何使用Eclipse作为SBT的前端.如何从eclipse启动SBT运行命令?如何启动SBT测试命令?
我有一个嵌套的元组结构(String,(String,Double)),我想将其转换为(String,String,Double).我有各种嵌套元组,我不想手动转换每个元组.有没有方便的方法呢?
我为我的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.KryoSerializer和org.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) 我想用scalariform格式化我的sbt构建文件.在启动sbt时,是否可以在构建定义本身上运行标量?
scala ×9
sbt ×3
apache-spark ×1
avro ×1
eclipse ×1
flatten ×1
generics ×1
hadoop ×1
lift ×1
mapreduce ×1
performance ×1
plugins ×1
scala-ide ×1
scalariform ×1
tuples ×1