Scala 2.10.6 + Spark 1.6.0:从DataFrame映射到案例类

时间:2017-04-17 15:34:49

标签: scala spark-dataframe case-class

根据以下情况,我正在寻找最合适的方法将DataFrame中包含的信息映射到我定义的一些案例类。

我有2个Hive表,第三个表代表它们之间的多对多关系。让我们称它们为“Item”,“Group”和“GroupItems”。 我正在考虑执行一个单独的查询加入它们,以获取单个组及其所有项目的信息。 因此,生成的DataFrame的每一行都将包含Group的字段和Item的字段。

然后,我创建了4个不同的案例类,以便在我的应用程序中使用这些信息。让我们称呼它们: - ItemProps1:其属性与某些Item字段匹配 - ItemProps2:其属性与某些Item字段匹配 - Item:包含一些与某些Item字段匹配的属性,并且有一个ItemProps1类型的对象,另一个类型为ItemProps2 - 组:其属性与组字段匹配,并包含项列表

我想要做的是将生成的DataFrame中包含的信息映射到这些案例类中,但我不知道哪种方法最合适。

我知道DataFrame有一个方法“as [U]”,这对于执行这种映射非常有用,但我担心在我的情况下它不会有用。

然后,我找到了一些手动执行映射的选项,如下所示:

df.map { 
    case Row(foo: Int, bar: String) => Record(foo, bar)
}

-

df.collect().foreach { row =>
    val foo = row.getAs[Int]("foo")
    val bar = row.getAs[String]("bar")
    Record(foo, bar)
}

这些方法中的任何一种是最合适的方法,还是应该以其他方式进行?

非常感谢!

0 个答案:

没有答案