我想知道,如果在Scala中将Sequence转换为不可变队列有标准和简短的方法吗?
我没有在文档中找到一种神奇的方法.
现在我这样做:
def toQueue[A](s: Seq[A]): Queue[A] = s match {
case x +: xs => x +: toQueue(xs)
case _ => Queue.empty[A]
}
Run Code Online (Sandbox Code Playgroud)
但还有什么更方便的吗?
我有一个类型列表,List(String,String)我想将其转换为地图.当我使用toMap方法时,我发现它没有保留List中的数据顺序.但是我的目标是通过保持数据的顺序与List相同,将列表转换为Map.我学会了ListMap保留插入顺序(但它是不可变的)所以我可以使用带有map函数的LinkedHashMap顺序插入数据,LinkedHashMap但这意味着我需要遍历所有痛苦的元素.任何人都可以建议我一个更好的方法吗?谢谢
我目前正在遵循Scala中的函数编程
这是applyin 的伪实现List[A]
def apply[A](as: A*): List[A] =
if (as.isEmpty) Nil
else ::(as.head, apply(as.tail: _*))
Run Code Online (Sandbox Code Playgroud)
如果我忽略: _*的as.tail: _*,斯卡拉抱怨的类型不匹配,这是有道理的,因为as.tail是Seq[A]在这里.
但这_*到底做了什么?
编辑::
正确的术语是序列通配符
我正在尝试从Spark Dataframe中过滤出行.
val sequence = Seq(1,2,3,4,5)
df.filter(df("column").isin(sequence))
Run Code Online (Sandbox Code Playgroud)
不幸的是,我得到了一个不受支持的文字类型错误
java.lang.RuntimeException: Unsupported literal type class scala.collection.immutable.$colon$colon List(1,2,3,4,5)
Run Code Online (Sandbox Code Playgroud)
根据文档,它采用scala.collection.Seq列表
我想我不想要文字?然后我可以接受什么样的包装类呢?
我正在阅读和练习 Scala,我发现了这个博客。
阅读关于组合谓词的部分我看到了这段代码
def complement[A](predicate: A => Boolean) = (a: A) => !predicate(a)
def any[A](predicates: (A => Boolean)*): A => Boolean =
a => predicates.exists(pred => pred(a))
def none[A](predicates: (A => Boolean)*) = complement(any(predicates: _*))
def every[A](predicates: (A => Boolean)*) = none(predicates.view.map(complement(_)): _*)
Run Code Online (Sandbox Code Playgroud)
我有 python 背景,想了解下划线和星号的含义,单独或一起使用时,理解它很奇怪,特别是对于none和every定义。
我遇到了这个:_*表示许多spark-scala答案,但找不到任何文档.实际上是什么意思?这种用法的一个例子就是这个问题的答案
如何在Spark Java中使用isin的DataFrame过滤器?
线:
df.filter(col("something").isin(list: _*)
Run Code Online (Sandbox Code Playgroud) 我有一些类似的寄存器定义,我想在regmap构造下编写.我的代码目前看起来像这样:
val regs = RegInit(Vec(Seq.fill(5)(0.U(32.W))))
regmap (
...
0x30 -> Seq(RegField(32,regs(0),RegFieldDesc("reg0",""),
0x34 -> Seq(RegField(32,regs(1),RegFieldDesc("reg1",""),
0x38 -> Seq(RegField(32,regs(2),RegFieldDesc("reg2",""),
0x3C -> Seq(RegField(32,regs(3),RegFieldDesc("reg3",""),
0x40 -> Seq(RegField(32,regs(4),RegFieldDesc("reg4",""),
...
)
Run Code Online (Sandbox Code Playgroud)
我的问题是,有没有办法使用Scala迭代器之一以更简洁的方式编写上述内容?我的另一个要求是我仍然需要能够在这个迭代器之前和之后添加寄存器(3个点线).
我相信,使用迭代器可以很好地防止复制/粘贴错误并且看起来更好.
在此先感谢您的帮助.
当我试图DBObject通过插入批量加载一个列表时,我得到了no implicit view available.
collection.insert(listObjects) // listObjects is a List[DBObject]
[error]Test.scala:139: No implicit view available from List[com.mongodb.casba
h.Imports.DBObject] => com.mongodb.casbah.Imports.DBObject.
Run Code Online (Sandbox Code Playgroud)
这个错误是什么意思?我怎么解决?
参考:
def insert [A] (docs: List[A])(implicit arg0: (A) ? DBObject) : WriteResult
在连接两个数据帧之后,我发现列顺序已经改变了我认为的那样.
实施例:加入两个数据帧的列[b,c,d,e]和[a,b]上b产量的列顺序[b,a,c,d,e].
如何更改列的顺序(例如[a,b,c,d,e])?我已经找到了在Python/R中实现它的方法,但不是Scala或Java.是否有任何方法允许交换或重新排序dataframe列?
当看到一些同事的 Scala-Spark 代码时,有时我会遇到他们使用列表来过滤数据帧,如下例所示:
val myList: List[String] = List("0661", "0239", "0949", "0380", "0279", "0311")
df.filter(col("col1").isin(myList:_*)
Run Code Online (Sandbox Code Playgroud)
上面的代码工作得很好,但是,这个没有:
df.filter(col("col1").isin(myList)
Run Code Online (Sandbox Code Playgroud)
我不明白的是,那个“冒号下划线星”:_*到底在做什么?
提前致谢!
我正在使用第三方库,正在尝试做一些抽象操作,并且遇到了一个接受varargs但未使用类型描述的方法的问题。就像是:
def outer(otherStuff:String*): Unit ={
if(someCondition)
methodInThirdPartyLibrary(otherStuff)
// other code....
}
def methodInThirdPartyLibrary(stuff:String*): Unit ={
println(stuff.mkString(","))
}
Run Code Online (Sandbox Code Playgroud)
给定库如何设置方法,是否有任何方法可以传递参数?
我想解析一个json文件,该文件输出的集合A。的签名Output是IO[List[A]]
我怎样才能将此值转换为Stream:Stream[IO, A]?我可以转换为一个,Stream[IO, List[A]]但不是我想要的
fs2.Stream.eval(input).flatMap(x => fs2.Stream.apply(x))
谢谢
scala ×11
apache-spark ×2
dataframe ×2
java ×2
casbah ×1
chisel ×1
collections ×1
fs2 ×1
implicit ×1
list ×1
mongodb ×1
queue ×1
rocket-chip ×1
scala-cats ×1