我们正在考虑使用Spark重新开发现有的应用程序。
我们现有的域模型(当前C#
类)将被重新编译为RDD,并且当前修改域模型的逻辑将被重构为转换RDD的函数。
问题是如何最好地将域类建模为RDD。
最简单的方法是将其建模为Map<String, Any>
。
然后可以使用sparkContext.parallelize(map).
另一种方法是在Scala中创建一个域类(可能是case class
)并将其加载为RDD。然后,RDD中的每个元素(或&#39; row&#39;)都是该类的一个实例。但是,这被认为是正确的方法还是最佳做法?并且,如果它是一种有意义的方法,Scala类如何作为RDD加载到Spark中?
由于
答案 0 :(得分:0)
这有效:
创建case class
case class User(username:String, age:Int, gender:String)
创建实例
var user1 = User("john", 46, "f")
var user2 = User("paul", 44, "m")
var user3 = User("miriam", 22, "m")
创建用户实例列表,并从中创建RDD
val users = List(user1, user2, user3)
val usersRDD = sc.parallelize(users)
创建函数来修改每个User
实例
def incrementAge(u:User) = {
val user = u.copy(age = t.age+1)
user
}
并将其传递给RDD
val modifiedRDD = usersRDD.map {x => incrementAge(x) }
确认
usersRDD.foreach { println }
有没有具有Spark经验的人有更多推荐的方法吗?