Guest User

Untitled

a guest
Mar 23rd, 2018
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.41 KB | None | 0 0
  1. package org.alfiler
  2.  
  3. import frameless.{Injection, TypedDataset}
  4. import org.alfiler.Algo.{Name, SecondName}
  5. import org.apache.spark.sql.SparkSession
  6. import shapeless.tag
  7. import shapeless.tag.@@
  8.  
  9.  
  10. object Algo {
  11. trait NameTag
  12. type Name = String @@ NameTag
  13. trait SecondNameTag
  14. type SecondName = String @@ SecondNameTag
  15.  
  16. def asSecondName(s:String):SecondName = tag[SecondNameTag][String](s)
  17.  
  18. def create(name: String, surname: String): Algo = new Algo(tag[NameTag][String](name), tag[SecondNameTag][String](surname))
  19. }
  20.  
  21. case class Algo(name:Name, secondName:SecondName)
  22.  
  23. object Main {
  24.  
  25. implicit def dateToLongInjection[T] = new Injection[String @@ T, String] {
  26. def apply(d: String @@ T): String = d.asInstanceOf[String]
  27. def invert(l: String): String @@ T = tag[T][String](l)
  28. }
  29.  
  30.  
  31. def main(args: Array[String]): Unit = {
  32. implicit val ss = SparkSession.builder().appName("frameless").master("local[*]").getOrCreate()
  33.  
  34. import frameless.syntax._
  35. val data = Seq(
  36. Algo.create("Stephen","Hawking"),
  37. Algo.create("Albert","Einstein")
  38. )
  39. val aptTypedDs = TypedDataset.create(data)
  40.  
  41. def doubleSurname(a:SecondName):SecondName = Algo.asSecondName(a+a)
  42.  
  43. aptTypedDs.filter(_.secondName.startsWith("H")).map(c => c.copy(secondName = doubleSurname(c.secondName))).show().run()
  44. //aptTypedDs.filter(_.secondName.startsWith("H")).map(c => c.copy(secondName = doubleSurname(c.name))).show().run()
  45. }
  46.  
  47. }
Add Comment
Please, Sign In to add comment