2

別のケース クラスを使用して、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 つの一般的な関数を使用できるものはありますか?」です。

4

1 に答える 1

4

少し時代遅れのようです(asメソッドはまさにあなたが望むことを行います)が、できます

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]

両方のメソッドは同等であり、まったく同じことを表現します ( Encodertype の暗黙の存在T)。

暗黙的なパラメーターを避けたい場合は、明示的に使用できますEncoder

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

convertTo(df, encoderFor[Clicks])
于 2016-11-19T12:27:03.713 に答える