我有一个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。
答案 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