2017-12-28 1 views
0

以下は、intellij IDE上でspark2.2.0で実行しようとしているコードです。しかし、私が得ている出力は、readble形式では見えません。Spark 2.2.0でデータが読み込めない形式のデータセット

val spark = SparkSession 
     .builder() 
     .appName("Spark SQL basic example").master("local[2]") 
     .getOrCreate() 

    // For implicit conversions like converting RDDs to DataFrames 
    import spark.implicits._ 

    import scala.reflect.ClassTag 
    implicit def kryoEncoder[A](implicit ct: ClassTag[A]) = 
     org.apache.spark.sql.Encoders.kryo[A](ct) 

    case class Person(name: String, age: Long) 

    // Encoders are created for case classes 
    val caseClassDS = Seq(Person("Andy", 32)).toDS() 
    caseClassDS.show() 

示す出力:

+--------------------+ 
|    value| 
+--------------------+ 
|[01 00 44 61 74 6...| 
+--------------------+ 

私はここで何をしないのです場合、誰が説明できますか?

おかげ

答えて

0

あなたがshowのためのオブジェクトをデシリアライズするために設計されていないKryo Encoderを使用しているためです。

より正確にはEncodersが利用可能な場合は、通常、Kryo Encoderを使用しないでください。パフォーマンスが低下し、機能が低下します。代わりにProductEncoder

spark.createDataset(Seq(Person("Andy", 32)))(Encoders.product[Person]) 
+0

おかげを使用していますが、このdoesntのは私のために動作するようです。私のコードに、 val caseClassDS = spark.createDataset(Seq(Person( "Andy"、32)))(Encoders.product [Person])を例外として与えています: – Alok

+0

ありがとう、しかしこれは私のために働くようです。 エラー:(24、84)Personに利用可能なTypeTagがありません(エンコーダーには、エンコーダーにエンコードされているエンコーダーのエンコーダーが含まれています) val caseClassDS = spark.createDataset(Seq(Person( "Andy"、32)))(Encoders.product [Person]) – Alok

+0

暗黙のdef kryoEncoder ['から暗黙的に'を取り除いてからやり直せますか?あるいは暗黙のdef kryoEncoderを完全に削除してください。 –

関連する問題