它在内部如何运作?
它是如何决定转换0.29999999999999998为0.3,即使0.3不能用二进制表示?
这是一些更多的例子:
scala> 0.29999999999999998
res1: Double = 0.3
scala> 0.29999999999999997
res2: Double = 0.3
scala> 0.29999999999999996
res3: Double = 0.29999999999999993
scala> 0.29999999999999995
res4: Double = 0.29999999999999993
Run Code Online (Sandbox Code Playgroud) 我有一个包含 8000 个循环的 Spark 应用程序,它在 5 个节点的集群上运行。每个节点有 125GB 内存和 32 个内核。相关代码如下所示:
for (m <- 0 until deviceArray.size) { // there are 1000 device
var id = deviceArray(m)
for (t <- 1 to timePatterns) { // there are 8 time patterns
var hrpvData = get24HoursPVF(dataDF, id, t).cache()
var hrpvDataZI = hrpvData.zipWithIndex
var clustersLSD = runKMeans(hrpvData, numClusters, numIterations)
var clusterPVPred = hrpvData.map(x => clustersLSD.predict(x))
var clusterPVMap = hrpvDataZI.zip(clusterPVPred)
var pvhgmRDD = clusterPVMap.map{r => (r._2, r._1._2)}.groupByKey
var arrHGinfo = pvhgmRDD.collect
// Post process …Run Code Online (Sandbox Code Playgroud) 以下函数在我看来是尾递归
但是编译器仍然抱怨如果我把@tailrec它放在上面:
def loop(newInterests: Set[Interest], oldInterests: Set[Interest]): Set[Interest] = {
newInterests.headOption.fold(oldInterests){ ni =>
val withSameKeyWord = oldInterests.find(oi => oi.keyword == ni.keyword)
withSameKeyWord.fold(loop(newInterests.tail, oldInterests + ni)){ k =>
loop(newInterests.tail,
oldInterests - k + k.copy(count = k.count + 1))
}
}
}
Run Code Online (Sandbox Code Playgroud) 什么是测试a是否Map[A,B]是双射的简单方法,即for
val m1 = Map( 1 -> "a", 2 -> "b")
val m2 = Map( 1 -> "a", 2 -> "a")
Run Code Online (Sandbox Code Playgroud)
我们认为这m1是双射的m2.
例如,我有跟随Scala列表,我想获得一个子列表,直到有一个要求可以满足.
val list = Seq(1,2,3,4,5,5,4,1,2,5)
Run Code Online (Sandbox Code Playgroud)
要求是数字是5,所以我希望结果如下:
Seq(1,2,3,4)
Run Code Online (Sandbox Code Playgroud)
目前我使用Scala集合indexWhere并splitAt返回:
list.splitAt(list.indexWhere(x => x == 5))
(Seq(1,2,3,4), Seq(5,5,4,1,2,5))
Run Code Online (Sandbox Code Playgroud)
我不确定有更好的方法来实现相同的更好的Scala集合的方法,我没有意识到?
因为value: Any我需要检查一个字符串的情况.
对于休息,案件应该归还value.
什么是正确的语法:case _ => _ ?
def foo(value: Any) = value match {
case x: String => if (x == "cond") None else x
case _ => _ // Compiler -> Not found value x$1. Unbound placeholder parameter
}
Run Code Online (Sandbox Code Playgroud) 我想编写一个算法,该算法匹配Scala中具有两个值的列表.
例如,如果我有以下列表:
val list = List(1, 3, 6, 8, 9, 14, 18)
Run Code Online (Sandbox Code Playgroud)
并有这两个值:
val a = 4
val b = 14
Run Code Online (Sandbox Code Playgroud)
我想得到这个清单:
val result = List(6, 8, 9, 14)
Run Code Online (Sandbox Code Playgroud)
如果考虑使用intersectScala 的方法,但只适用于两个列表.
我也考虑过使用for循环,但这不起作用.
所以我最终不知道如何解决这个问题.
谁能帮我?
在下面的示例中,l1和l2是整数列表,我想知道为什么会产生错误?
l1.zip(l2).map(_ => { if(_._1 > _._2) 1 else 2 } )
Run Code Online (Sandbox Code Playgroud)
它抱怨它错过了扩展功能的参数类型.为什么这里不允许使用下划线?
val df = new SimpleDateFormat("MMM dd yyyy HH:mm:ss.SSS zzz")
var date1 = new Date()
println(date1.getTime)
Run Code Online (Sandbox Code Playgroud)
结果:
1407309964324
我如何将其增加5分钟?
scala ×9
apache-spark ×1
bijection ×1
datetime ×1
haskell ×1
java ×1
list ×1
match ×1
performance ×1
precision ×1