小编Omi*_*mid的帖子

使用Shapeless将Map [String,Any]转换为案例类

这里的问题是关于将案例类映射到Map [String,Any].我想知道相反的方法是什么,将Map [String,Any]转换为case类.给出以下地图:

val mp = Map("name" -> "Tom", "address" -> Map("street" -> "Jefferson st", "zip" -> 10000))
Run Code Online (Sandbox Code Playgroud)

将其转换为以下案例类Person:

case class Person(name:String, address:Address)
case class Address(street:String, zip:Int)

val p = Person("Tom", Address("Jefferson st", 10000))
Run Code Online (Sandbox Code Playgroud)

用这样的东西:

val newP = mp.asCC[Person]
assert(newP.get == p)
Run Code Online (Sandbox Code Playgroud)

我应该如何使用Shapeless.

scala shapeless

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

使用Shapeless将嵌套的case类转换为嵌套的Maps

我试图使用Shapeless 来解决这个问题,总结一下,它是关于将嵌套的case类转换为Map [String,Any],这是示例:

case class Person(name:String, address:Address)
case class Address(street:String, zip:Int)

val p = Person("Tom", Address("Jefferson st", 10000))
Run Code Online (Sandbox Code Playgroud)

它想转换p为以下内容:

Map("name" -> "Tom", "address" -> Map("street" -> "Jefferson st", "zip" -> 10000))
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用Shapeless LabelledGeneric,这是我迄今为止所做的:

import shapeless._
import record._, syntax.singleton._
import ops.record._
import shapeless.ops.record._

def writer[T,A<:HList,H<:HList](t:T)
(implicit lGeneric:LabelledGeneric.Aux[T,A],
 kys:Keys.Aux[A,H],
 vls:Values[A]) = {
    val tGen = lGeneric.to(t)
    val keys = Keys[lGeneric.Repr].apply
    val values = Values[lGeneric.Repr].apply(tGen)
    println(keys)
    println(values)
  }
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用递归编写器来检查每个值,并尝试为值中的每个元素创建Map.上面的代码工作正常但是当我想要values使用以下代码迭代时,我得到了这些错误.

values.map(identity)
//or
tGen.map(identity)

Error:(75, 19) could not …
Run Code Online (Sandbox Code Playgroud)

scala shapeless

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

从url下载zip并使用SBT在资源中提取它

我想从URL下载一个zip文件(我的数据库)并将其提取到特定文件夹(例如资源)中.我想在我的项目构建sbt文件中执行此操作.这样做的适当方法是什么?我知道sbt.IO已经解压缩并下载了.我找不到一个使用下载的好例子(那些我发现不起作用).有什么sbt插件可以帮我吗?

scala sbt

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

在Scala集合中查找和替换项目

假设我有一个清单:

val list = List(1,2,3,4,5)
Run Code Online (Sandbox Code Playgroud)

我想替换满足谓词的所有/第一项,我知道以下方法:(例如,替换任何偶数为-1的数字)

val filteredList = list.zipWithIndex.filter(_._2 % 2 == 0)
val onlyFirst = list.updated(filteredList.head._2, -1)
val all = for(i <- list) yield if(i % 2 ==0) -1 else i
Run Code Online (Sandbox Code Playgroud)

是否有任何收集功能或不错的Scala方式有助于这种情况并具有良好的性能

我也想保留订单,所以我不想使用filterNot和添加其他项目,如:(它也没有效率)

val onlyFirst = list.filterNot(_ % 2 != 0) ::: list.filter(_ % 2 == 0).map(x => -1)
Run Code Online (Sandbox Code Playgroud)

scala scala-collections

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

在Play Json库中为单例提供隐含值

我有以下配置:

sealed trait Status
case object Edited extends Status
case object NotEdited extends Status

case class Tweet(content:String, status:Status)
Run Code Online (Sandbox Code Playgroud)

我想使用Play Json格式,所以我想我必须有这样的东西(我不想在伴侣对象中这样做):

trait JsonImpl{
    implicit val TweetFormat = Json.format[Tweet]
    implicit val statusFormat = Json.format[Status]
    implicit val StatusFormat = Json.format[Edited.type]
    implicit val NotEditedFormat = Json.format[NotEdited.type]
}
Run Code Online (Sandbox Code Playgroud)

但编译器抱怨并说:

No implicit format for Tweet available.

它也说我无法使用,Edited.type因为它需要应用和取消应用功能.我该怎么办?

EDIT1:

我能想到这样的事情:

implicit object StatusFormat extends Format[Status] {
    def reads(json: JsValue) =
      (json \ "type").get.as[String] match {
        case "" => Edited
        case _ => UnEdited
      }

    def …
Run Code Online (Sandbox Code Playgroud)

json scala playframework scala-macros

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

将Seq,List,Option和Map等Container类型添加到无形泛型转换中

为了完成我在12中有关转换case class为/从转换的一系列问题,我想知道如何将上述答案扩展到容器类型,特别是:Map[String, Any]

  • Option
  • Seq
  • Set
  • Map
  • Tuple小号

在案例类fromto Map[String, Any]

scala shapeless

6
推荐指数
0
解决办法
189
查看次数

是否可以在 PySpark Dataframe 中定义递归 DataType?

我想创建一个像这个例子这样的模式:

friendSchema = StructType([ \
    StructField("firstname",StringType(),True), \
    StructField("middlename",StringType(),True), \
    StructField("friends",**friendSchema**,True)
Run Code Online (Sandbox Code Playgroud)

我知道数据必须标准化,但我想知道 Spark 是否具有创建如上所述的模式的功能。如果可以的话,怎样才能做到呢?使用UDT可行吗?

apache-spark apache-spark-sql pyspark

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

Cassandra CQL 支持 CONTAINS 否定

Cassandra 支持CONTAINS集合:

CREATE TABLE contacts (
    id int PRIMARY KEY,
    firstName text,
    lastName text,
    phones map<text, text>,
    emails set<text>
);
CREATE INDEX ON contacts (firstName);
CREATE INDEX ON contacts (keys(phones)); // Using the keys function to index the map keys
CREATE INDEX ON contacts (emails);
Run Code Online (Sandbox Code Playgroud)

并且可以查询emails集合并检查特定电子邮件。简单地:

SELECT * FROM contacts WHERE emails CONTAINS 'Benjamin@oops.com';
Run Code Online (Sandbox Code Playgroud)

如果要检查是否缺少某个元素(例如:),解决方案是什么DOES NOT CONTAIN?我在 CQL 文档中找不到这样的功能,有什么解决方案吗?

cql cassandra cql3

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

检查"isDefined"并一起映射到"get"

如何更有效地执行以下操作:

myoptionList.filter(_.isDefined).map(_.get)
Run Code Online (Sandbox Code Playgroud)

这需要两次迭代时间,有没有更好的方法来做到这一点?

scala scala-collections

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

具有*(varargs)参数的案例类的模式匹配

我有两个案例类:

case class B(value:Int)
case class A(a:String, b:B*) extends ALike
Run Code Online (Sandbox Code Playgroud)

我想在A的实例上进行模式匹配:

def foo(al:ALike) = {
  al match {
    case A(a, bs) => ...
  }
}
Run Code Online (Sandbox Code Playgroud)

Scalac不明白这bs是一个Seq[B]并且认为它只是一个B.为什么会这样,我该如何进行模式匹配呢?

scala pattern-matching

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