寄せ木張りのフォーマットを使用してHDStreamにDStreamを保存します。問題は、私のケースクラスがjoda.DateTimeを使用し、Spark SQLがこれをサポートしていないことです。たとえば、次のようにjoda.DateTimeのケースクラスのDStreamをSpark DataFrameに変換します
case class Log (timestamp: DateTime, ...dozen of other fields here...)
しかし、私はエラーを得た:java.lang.UnsupportedOperationExceptionが:DFにRDDを変換しようとしたときに型org.joda.time.DateTimeのスキーマがサポートされていません。
def output(logdstream: DStream[Log]) {
logdstream.foreachRDD(elem => {
val df = elem.toDF()
df.saveAsParquet(...)
});
}
マイモデルは複雑で多くのフィールドを持っているので、joda.DateTimeを取り除くために異なるケースクラスを作成する必要はありません。別のオプションは、jsonから寄木張りに直接保存することですが、理想的ではありません。 joda.DateTimeからspark(スパークのデータフレームに変換)で使用するsql.Timestampへの自動変換を行う簡単な方法はありますか?
ありがとうございました。
こんにちは、私が正しくあなたを理解していればわかりません。しかし、次の文でエラーが発生します。val df = elem.toDF();つまり、.toDF()関数を使用してRDD [ログ]をデータフレームに変換できません。あなたの提案されたソリューションは、dfがすでに利用可能であると仮定しているようです。 – auxdx
あなたは正しいです、私はそれを逃しました。私は答えを変えました。 – bear911