2016-10-19 9 views
1

RDD#toDSメソッドを使用してRDDからSpark DataSetを作成しようとしています。Spark DataSet CreationでScala Caseクラスの代わりにJavaドメインオブジェクトを使用

しかし、Scalaのケースクラスを使用してスキーマを指定する代わりに、サードパーティのライブラリで定義されている既存のドメインオブジェクトを使用したいと考えています。私が行うときしかし、私は次のエラーを取得すること:

scala> val patientsDataSet = patients.toDS[Patient] 
<console>:46: error: missing arguments for method toDS in class MongoRDD; 
follow this method with `_' if you want to treat it as a partially applied function 
     val patientsDataSet = patients.toDS[Patient] 

はとにかくあり、私の代わりにJavaオブジェクトを使用することができます。

scala> import org.hl7.fhir.dstu3.model.Patient 
import org.hl7.fhir.dstu3.model.Patient 

scala> val patients = sc.loadFromMongoDB(ReadConfig(Map("uri" -> "mongodb://mongodb/fhir.patients"))) 
patients: com.mongodb.spark.rdd.MongoRDD[org.bson.Document] = MongoRDD[0] at RDD at MongoRDD.scala:47 

scala> val patientsDataSet = patients.toDS[Patient]() 
<console>:44: error: not enough arguments for method toDS: (beanClass: Class[org.hl7.fhir.dstu3.model.Patient])org.apache.spark.sql.Dataset[org.hl7.fhir.dstu3.model.Patient]. 
Unspecified value parameter beanClass. 
     val patientsDataSet = patients.toDS[Patient]() 
                ^

これは、私は括弧を削除すると、私が得るものですここのクラスは?

ありがとうございます!

+0

は括弧なしで試してみよう: 'patients.toDS [患者]' – Yawar

+0

@Yawar私は括弧なしでそれを試してみましたが、私は私の質問を更新しました私が得たエラー。 –

+0

あなたの '.toDS [Patient]()'メソッドに必要なBeanクラスを与えてみましょう: 'patients.toDS [Patient](classOf [Patient])' – Yawar

答えて

0

あなたのJavaオブジェクトを拡張するケースクラスを作成することができます。

のJava:

public class Patient { 

    private final String name; 
    private final String status; 

    public Patient(String name, String status) { 
    this.name = name; 
    this.status = status; 
    } 

    public String getName() { 
    return name; 
    } 

    public String getStatus() { 
    return status; 
    } 

} 

スカラ:

case class Patient0(name: String, status: String) extends Patient(name, status) 
val patientsDataSet = patients.toDS[Patient]() 
val patients = sc.loadFromMongoDB(ReadConfig(Map("uri" -> "mongodb://mongodb/fhir.patients"))) 
+0

これらのドメインオブジェクトには多くのフィールドがあるため、実装が難しい場合があります。例:http://hapifhir.io/apidocs-dstu3/org/hl7/fhir/dstu3/model/Patient.html –

関連する問題