2016-04-08 8 views
1

スカラ問題: JSONデータが抽出されてケースクラスに格納されるため、時間文字列データをのsqlタイムスタンプに変換する必要があります。SparkデータフレームとSalat DAOのJava// Mongo DBストア。実行時に引数タイプが変更されたスカラケースクラス

両方とも、他の形式をサポートしていません。

現在、我々は同じのための2つのケースクラスを使用している:

case class A(a:int, b:string, time:java.sql.timestamp) 
case class B(a:int, b:string, time:java.util.Date) 

ので、JSONの抽出方法は、ストアのタイプのスパークに基づいて上記の二つのケースクラスのいずれかを移入/モンゴ

が良くありこれを処理する方法は?

は、ケースクラスはさえ入れ子にすることができ、(今度はそれらの中に、時間の引数を持つことができます含むCおよびD)

答えて

0

I注意ください(複合クラスが一つの方法ですが、再び、それはあまりにも、ネストされた取得します)最初にアプリケーションドメインを考えるでしょう。 TimestampまたはDateは、データストアに応じた実装の詳細です。

私の提案された解決策は

case class MyDomainObject(a: Int, b: String, time: java.util.Instant) 

object MyDomainObject { 
    def fromMongoObject(o: MyDomainMongoObject): MyDomainObject = ??? 
    def fromSparkObject(o: MyDomainSparkObject): MyDomainObject = ??? 
} 

だろう

(注、私はあなたが好むものは何でも、時間表現を選択することができ、一例としてjava.util.Instantを選んだ)とモンゴ/スパークを処理するクラス/関数それぞれMyDomainMongoObjectMyDomainSparkObjectのオブジェクトを抽出し、コンパニオンオブジェクトのメソッドを使用して変換します。このようにして、1つの特定のタイプの時間表現について考えるだけでドメインをきれいに保つことができますが、すべてのデータストアアダプタは独自のタイプを使用できます。

+0

ありがとうございます!しかし、私が入る可能性のある問題は、caseクラスが要素seqをネストしているときです。私はそれぞれを反復して、大きなデータセットで網羅的になる変換を行う必要があります。例えば、 caseクラスB(a:int、b:string、time:java.util.Instant、seq [B])のケースクラスB(a:int、b:string、time:java.util.Instant)アダプターは最初にseq Bを変換し、次にAを正しい形式で取得する必要があります。私の理解はここで正しいのですか?または私は何かを逃していますか?あなたの応答を感謝する! – Anand

関連する問題