小编obl*_*ion的帖子

使用隐式功能实现Cake Pattern

我有一个场景,我想实现一个Cake Pattern的变体,但是向一个类添加隐式功能(一个Spark DataFrame).

所以,基本上,我希望能够运行如下代码:

trait Transformer {
  this: ColumnAdder =>

  def transform(input: DataFrame): DataFrame = {
    input.addColumn("newCol")
  }
}

val input = sqlContext.range(0, 5)
val transformer = new Transformer with StringColumnAdder
val output = transformer.transform(input)
output.show
Run Code Online (Sandbox Code Playgroud)

并找到如下结果:

+---+------+
| id|newCol|
+---+------+
|  0|newCol|
|  1|newCol|
|  2|newCol|
|  3|newCol|
|  4|newCol|
+---+------+
Run Code Online (Sandbox Code Playgroud)

我的第一个想法是仅在基本特征中定义隐式类:

trait ColumnAdder {
  protected def _addColumn(df: DataFrame, colName: String): DataFrame

  implicit class ColumnAdderRichDataFrame(df: DataFrame) {
    def addColumn(colName: String): DataFrame = _addColumn(df, colName)
  }
}

trait StringColumnAdder extends …
Run Code Online (Sandbox Code Playgroud)

scala apache-spark

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

Api网关或无Api网关

我正在开发一个基于的应用程序microservice architecture.在这里,每个service都是可独立部署的play-scala application曝光rest apis.我想Api gateway在这些服务之上实现映射传入请求.我遵循这里讨论的架构:构建微服务

很少有基于微服务架构的具有实质成熟度的项目.其中一个是Reactive Microservices.但是这个项目没有使用api gateway pattern,似乎跟着反模式这个项目有一个问题,关于这里丢失的Api网关.这里的贡献者声称他们没有遵循,api gateway pattern因为它有风险single-point of failure.

这种不同的意见对我来说非常混乱.所以,我正在寻找关于我是否应该使用Api Gateway的建议.What is the right practice here ?

microservices

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

如何在scala中的列表列表上执行转置?

我有一个以下结构的scala列表:

val list = List(
  List(a1,a2,a3,a4,a5),
  List(b1,b2,b3,b4,b5),
  List(c1,c2,c3,c4,c5)
)
Run Code Online (Sandbox Code Playgroud)

从这个列表中,我想生成一个如下所示的列表:

List(
  List(a1,b1,c1),
  List(a2,b2,c2),
  List(a3,b3,c3),
  List(a4,b4,c4),
  List(a5,b5,c5)
)
Run Code Online (Sandbox Code Playgroud)

我如何在scala中实现这一点?

scala list

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

修剪案例类的String字段的值

我正在编写一个使用无形的泛型函数,它接受a的实例case class并修剪字符串的所有字段值.案例类可以有可选字段,嵌套对象,列表等.

我有一个案例课Person.

case class Person(name: Option[String], address: List[String], friends: List[Person])
Run Code Online (Sandbox Code Playgroud)

我目前拥有的功能:

import shapeless._, ops.hlist._

  object trimmer extends Poly1 {
    implicit val stringOptCase = at[Option[String]](_.map(_.trim))
    implicit val stringListCase = at[List[String]](_.map(_.trim))
    implicit def skipCase[A] = at[A](identity)
  }

  def trimStringValues[A, R <: HList](a: A)(implicit
                                     gen: Generic.Aux[A, R],
                                     mapper: Mapper.Aux[trimmer.type, R, R]
  ) = gen.from(mapper(gen.to(a)))
Run Code Online (Sandbox Code Playgroud)

当我使用上面的函数时,它只适用于类的根级别name字段Person.它不适用于列表或对象字段.

val person = Person(name = Some(" john "), address = List(" ny"," vegas "), friends = List(Person(Some(" …
Run Code Online (Sandbox Code Playgroud)

scala shapeless

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

如何编写dockerfile来在容器中运行sbt项目

我想手动编写dockerfile而不使用任何sbt插件.我正在使用sbt 0.13.8.我查看了dockerfile参考,但无法获得足够的洞察力来满足我的要求.演示非常有用

sbt docker

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

"反应宣言"中事件驱动架构与消息驱动架构的区别究竟是什么?

我读了Reactive Manifesto.

但我无法理解event driven architectures和之间的核心差异message driven architectures.结果,我也无法理解为什么reactive manifesto更喜欢Message Driven systems而不是那Event Driven个人的原因.

我还看了一下这次访谈,其中Martin Thompson讨论了反应性宣言.

但是,我无法清楚地区分这两种架构,它们的优点和用例.

event-driven reactive-programming typesafe

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

如何在Scala列表中找到元素的最后出现?

我有一个Student列表,我想从中找到最后一个匹配的年龄为23岁的学生。

我知道该find()方法为我们提供了第一个匹配项,如下所示:

case class Student(id: Int, age: Int)

val students = List(Student(1, 23), Student(2, 24), Student(3, 23))

val firstStudentWithAge23 = students.find(student => student.age == 23)
// Some(Student(1, 23))
Run Code Online (Sandbox Code Playgroud)

这段代码给了我第一个匹配的学生。但是我需要最后一个匹配的学生。

现在,我使用的reverse方法是find

val lastStudentWithAge23 = students.reverse.find(student => student.age == 23)
// Some(Student(3,23))
Run Code Online (Sandbox Code Playgroud)

这给了我最后一个匹配的学生。

但这似乎不是一个好方法,因为必须首先将整个列表颠倒。我怎样才能以更好的功能实现这一目标?

scala

5
推荐指数
3
解决办法
1136
查看次数

如何在play框架中获取所有Route URL字符串的列表?

我的play 2.4.x应用程序中有很多控制器.

我想得到一个all route URLs指向各自控制器的列表.我知道如何从当前请求中获取URL.但我需要一个播放应用程序中可用的所有URL列表.我想generate this list dynamically because URLs can be changed/added/deleted in future.

那么,有什么方法可以动态生成这个URL列表?或者我是否有义务将所有URL静态存储在缓存或字典中的某个位置?

scala playframework

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

了解NotUsed和Done

我有一个很难理解的目的和意义NotUsed,并Done在阿卡流.

让我们看看以下2个简单的例子:

使用NotUsed:

implicit val system = ActorSystem("akka-streams")
implicit val materializer = ActorMaterializer()

val myStream: RunnableGraph[NotUsed] =
  Source.single("stackoverflow")
  .map(s => s.toUpperCase())
  .to(Sink.foreach(println))

val runResult:NotUsed = myStream.run()
Run Code Online (Sandbox Code Playgroud)

使用完成

implicit val system = ActorSystem("akka-streams")
implicit val materializer = ActorMaterializer()

val myStream: RunnableGraph[Future[Done]] =
  Source.single("stackoverflow")
  .map(s => s.toUpperCase())
  .toMat(Sink.foreach(println))(Keep.right)

val runResult: Future[Done] = myStream.run()
Run Code Online (Sandbox Code Playgroud)

当我运行这些示例时,在两种情况下都得到相同的输出:

STACKOVERFLOW //output
Run Code Online (Sandbox Code Playgroud)

那么NotUsed和Done到底是什么?有什么区别,什么时候我应该优先于另一个?

scala akka akka-stream

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

向Scala案例类添加字段?

我已经看过一些博客Pimp my Library pattern,这些似乎适用于向类添加行为.

但是,如果我有一个case class,我想要add data members它呢?作为一个案例类我不能扩展它(从案例类继承被弃用/强烈建议不鼓励).这些pimp模式是否允许我将数据添加到案例类?

scala class case

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