小编elm*_*elm的帖子

为什么0.29999999999999998转换为0.3?

它在内部如何运作?

它是如何决定转换0.299999999999999980.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)

floating-point precision scala

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

Spark 性能 - 如何并行化大循环?

我有一个包含 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)

parallel-processing performance scala apache-spark

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

为什么以下函数不是尾递归?

以下函数在我看来是尾递归
但是编译器仍然抱怨如果我把@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)

scala tail-recursion

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

Scala测试Map是双射的

什么是测试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 bijection scala-collections

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

Scala集合选择元素,直到第一个满足要求

例如,我有跟随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集合indexWheresplitAt返回:

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集合的方法,我没有意识到?

scala

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

在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 pattern-matching

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

在Scala中匹配具有两个值的列表

我想编写一个算法,该算法匹配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循环,但这不起作用.

所以我最终不知道如何解决这个问题.

谁能帮我?

functional-programming scala list match

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

我们如何在新行中拆分列表元素

我仍然是Haskell的初学者,我想知道如何在新行中分割列表中的数字,以便每行包含列表中的一个元素.

haskell

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

映射Scala元组示例

在下面的示例中,l1和l2是整数列表,我想知道为什么会产生错误?

l1.zip(l2).map(_ => { if(_._1 > _._2) 1 else 2 } )
Run Code Online (Sandbox Code Playgroud)

它抱怨它错过了扩展功能的参数类型.为什么这里不允许使用下划线?

scala

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

如何在Scala或Java中将纪元时间增加5分钟

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分钟?

java datetime scala

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