問題タブ [apache-spark-encoders]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
scala - Apache Spark 2.1: java.lang.UnsupportedOperationException: scala.collection.immutable.Set[String] のエンコーダが見つかりません
Scala 2.11.6 で Spark 2.1.1 を使用しています。次のエラーが表示されます。ケースクラスは使用していません。
コードの次の部分は、スタックトレースが指す場所です。
scala - Spark Dataset[T] コンストラクターとしてのジェネリック T
次のスニペットではtryParquet
、Parquet ファイルが存在する場合、関数はデータセットを読み込もうとします。そうでない場合は、提供されたデータセット プランを計算して保持し、返します。
ただし、これにより次のコンパイルエラーが発生しますdf.as[T]
。
データセットに格納されているタイプのエンコーダが見つかりません。プリミティブ型 (Int、String など) と製品型 (ケース クラス) は、spark.implicits._ をインポートすることでサポートされます。
他のタイプのシリアル化のサポートは、将来のリリースで追加される予定です。
case Success(df) => df.as[T]
型なしを返すようにtryParquet
キャストを行い、呼び出し元が目的のコンストラクターにキャストできるようにすることで、この問題を回避できます。ただし、型を関数によって内部的に管理したい場合の解決策はありますか?df
DataFrame
scala - マップのデータセットを作成するには?
spark.createDataset
Spark 2.2 を使用していますが、Seq
ofを呼び出そうとすると問題が発生しますMap
。
私の Spark Shell セッションからのコードと出力は次のとおりです。
を試しましimport spark.implicits._
たが、Spark シェル セッションによって暗黙的にインポートされていることは確かです。
これは現在のエンコーダではカバーされていないケースですか?
scala - Scalaコレクションのエンコーダーを作成する方法(カスタムアグリゲーターを実装するため)?
Scala 2.11 で Spark 2.3.0。ここAggregator
のドキュメントに従ってカスタムを実装しています。アグリゲーターには、入力、バッファー、および出力の 3 つのタイプが必要です。
私のアグリゲーターは、ウィンドウ内の以前のすべての行に作用する必要があるため、次のように宣言しました。
オーバーライド メソッドの 1 つは、バッファ タイプ (この場合はListBuffer
. 適切なエンコーダーも、これをエンコードする他の方法も見つからないため、org.apache.spark.sql.Encoders
ここで何を返すかわかりません。
タイプの単一のプロパティを持つ新しいケースクラスを作成し、ListBuffer[Foo]
それをバッファクラスとして使用してから使用することをEncoders.product
考えましたが、それが必要かどうか、または何か他に欠けているものがあるかどうかはわかりません。ヒントをありがとう。