Spark 1.5.2を使用して、以下の構文を使用してscalaオブジェクトからデータフレームを作成しています。私の目的は、単体テスト用のデータを作成することです。代わりにSpark:SQLコンテキスト:Scalaオブジェクトからデータフレームを作成する
class Address (first:String = null, second: String = null, zip: String = null){}
class Person (id: String = null, name: String = null, address: Seq[Address] = null){}
def test() = {
val sqlContext = new SQLContext(sc)
import sqlContext.implicits._
val persons = Seq(
new Person(id = "1", name = "Salim",
address = Seq(new Address(first = "1st street"))),
new Person(name = "Sana",
address = Seq(new Address(zip = "60088")))
)
// The code can't infer schema automatically
val claimDF = sqlContext.createDataFrame(sc.parallelize(persons, 2),classOf[Person])
claimDF.printSchema() // This prints "root" not the schema of Person.
}
私は人を変換し、ケースクラスにアドレスならば、スパークは、上記の構文を使用して、またはsc.parallelize(persons, 2).toDF
を使用するか、または私ができるsqlContext.createDataFrame(sc.parallelize(persons, 2),StructType)
を使用して自動的にのスキーマを継承することができますそれは20以上のフィールドを保持することができず、クラス内に多くのフィールドを持っているため、ユースケースクラスを使用していません。また、StructTypeを使用すると多くの不都合が生じます。ケースクラスは最も便利ですが、あまりに多くのプロパティを保持することはできません。
ご協力いただきありがとうございます。
。 (このシグネチャのために 'createDataFrame [A <:Product](data:Seq [A])') –