3

このメソッドをコンパイルするにはどうしたらいいですか?不思議なことに、暗黙のスパークはすでにインポートされています。スパークケースクラスのスカラ汎用エンコーダ

def loadDsFromHive[T <: Product](tableName: String, spark: SparkSession): Dataset[T] = { 
    import spark.implicits._ 
    spark.sql(s"SELECT * FROM $tableName").as[T] 
    } 

これはエラーです:

Unable to find encoder for type stored in a Dataset. Primitive types (Int, String, etc) and Product types (case classes) are supported by importing spark.implicits._ Support for serializing other types will be added in future releases. 
[error]  spark.sql(s"SELECT * FROM $tableName").as[T] 
+0

プリミティブとは別に、製品で使用される他のタイプは何ですか? –

+0

私はケースクラスを使い、プリミティブだけを使いたいと思っています。しかし、上記のスニペットは文字通りコンパイルされません。 –

答えて

10

org.apache.spark.sql.SQLImplicitsのソースコードによると、あなたは存在する暗黙のEncoderためには、あなたのタイプのための型クラスTypeTagが必要になります。

import scala.reflect.runtime.universe.TypeTag 
def loadDsFromHive[T <: Product: TypeTag](tableName: String, spark: SparkSession): Dataset[T] = ... 
関連する問題