将域类建模为RDD

时间:2016-03-28 09:37:47

标签: apache-spark

我们正在考虑使用Spark重新开发现有的应用程序。 我们现有的域模型(当前C#类)将被重新编译为RDD,并且当前修改域模型的逻辑将被重构为转换RDD的函数。

问题是如何最好地将域类建模为RDD。 最简单的方法是将其建模为Map<String, Any>。 然后可以使用sparkContext.parallelize(map).

将其作为RDD加载到Spark中

另一种方法是在Scala中创建一个域类(可能是case class)并将其加载为RDD。然后,RDD中的每个元素(或&#39; row&#39;)都是该类的一个实例。但是,这被认为是正确的方法还是最佳做法?并且,如果它是一种有意义的方法,Scala类如何作为RDD加载到Spark中?

由于

1 个答案:

答案 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经验的人有更多推荐的方法吗?