如何将多个案例类的RDD转换为其组件的RDD

时间:2016-07-01 19:16:54

标签: apache-spark rdd case-class

我有一个Spark RDD,它有两种类型的类型 - 如下所示:

RDD[(ACTKey, UIDSKey)]

其中case类定义如下:

case class ACTKey(ACCOUNT: Int, PERIOD: String, COUNTRY: String)
case class UIDSKey(PRODUCT: String, UNIT: String, ID: Int)

当我通过调用dataframe.saveAsTable(“MyTable”,SaveMode.Overwrite)将其保存在Hive表中时,它会创建一个二维表结构:

_1 (struct<ACCOUNT:int,PERIOD:string,COUNTRY:string>)
_2 (struct<PRODUCT:string,UNIT:string, ID:int>)

我希望有一个像这样的简单表结构: ACCOUNT:int,PERIOD:string,COUNTRY:string,PRODUCT:string,UNIT:string,ID:int

一种方法是手动将我的RDD映射到case classe的各个组件,例如map(x =&gt;(x._1.ACCOUNT,x._1.PERIOD,... etc))但是那里是太多的硬编码,如果我的案例类改变,将不得不改变。所以我正在寻找一个更优雅的解决方案,比如可以平整我的RDD结构,可以用于任何基于一组案例类的RDD。

1 个答案:

答案 0 :(得分:0)

试试这个:

As a user
......
Scenario: Breaking a rule
Given:I'm an active user
When: I break the rule 'X'
Then: I should be added to rule breakers' list