2016-11-19 7 views
1

異なるケースクラスを使用してdataFrameをdataSetに変換したいとします。 私のコードは以下のようになります。エンコーダをパラメータとしてデータフレームのメソッドとして渡す方法

case Class Views(views: Double) 
case Class Clicks(clicks: Double) 

def convertViewsDFtoDS(df: DataFrame){ 
    df.as[Views] 
} 

def convertClicksDFtoDS(df: DataFrame){ 
    df.as[Clicks] 
} 

だから、私の質問は「私はこの関数に追加のパラメータとしてパスケースクラスで、この1つの一般的な機能を使用することができますとにかくありますか?」

答えて

1

ANの有無(どちらの方法が同等であり、まったく同じことを表現することができます

import org.apache.spark.sql.{Encoder, Dataset, DataFrame} 

def convertTo[T : Encoder](df: DataFrame): Dataset[T] = df.as[T] 

または

def convertTo[T](df: DataFrame)(implicit enc: Encoder[T]): Dataset[T] = df.as[T] 

as方法が正確に何をしたいん)少し時代遅れようだが、タイプTの暗黙のEncoder)。

def convertTo[T](df: DataFrame, enc: Encoder[T]): Dataset[T] = df.as[T](enc) 

convertTo(df, encoderFor[Clicks]) 
:あなたは暗黙のパラメータを回避したい場合

は、あなたがダウンして、明示的Encoderすべての方法を使用することができます

関連する問題