spark-jobserver を使い始めて、Sparkがデータフレームをフラット化するようにデータ フレームをフラット化できることを学びましたが、これはまだhttps://github.com/spark-jobserver/spark-jobserver#job-result-serializationを満たしません
これがスパークから得た結果である場合
Array([1364767200000,1.9517414004122625E15], [1380578400000,6.9480992806496976E16])
どうすればそれを適切な形式にマッピングできますか? (便利なシリアル化) フィールドを追加するにはどうすればよいですか?
次のような配列で遊んでみようとするとArray([1,2], [3,4])
、エラーが発生するだけです。
現在、データフレームをフラット化する Sparkに基づいて、次のシリアル化を取得します。
"result": "Map(1364767200000 -> 1.9517414004122625E15, 1380578400000 -> 6.9480992806496976E16)"
これは明らかにジョブサーバーによって「解析」されていません。
私が理解している限り、ネストされた配列 (からcollect
) は正しくシリアル化できません。ただし、このマップはシリアライズ可能である必要があります。なにが問題ですか?
編集
適切に型指定されたリストを返す場合にのみ、Json エンコーディングが機能するようです。
case class Student(name: String, age: Int)
List(Student("Torcuato", 27), Student("Rosalinda", 34))
結果は次のとおり"result": [["Torcuato", 27], ["Rosalinda", 34]]
です。すでに
val dataFrame: DataFrame = sql.createDataFrame(sql.sparkContext.parallelize(List(Student("Torcuato", 27), Student("Rosalinda", 34))))
dataFrame.collect
"result": ["[Torcuato,27]", "[Rosalinda,34]"]
奇妙な種類の Json を取得します。
問題を理解している限り、すべての結果をカスタム クラスに解析する必要があります。どうすればこれを達成できますか?