PostgreSQL に 100 万行と 100 列以上のデータ ソースがあり、Spark SQL を使用したいので、このデータ ソースを変換してSchemaRDD
.
Spark SQL プログラミング ガイドでは2 つのアプローチが紹介されています。1 つはリフレクションによるものです。
case class Row(Var1: Int, Var2: String, ...)
100以上の列があるので、これは面倒です。
もう 1 つのアプローチは、「プログラムによるスキーマの指定」です。つまり、次のように定義する必要があります。
val schema =
StructType(
Seq(StructField("Var1", IntegerType), StructField("Var2", StringType), ...))
これは私にとっても退屈です。
PostgreSQL
実際には、クラスを使用してデータベースをロードするため、まだ別の問題がありますが、コンストラクターのパラメーターでJdbcRDD
スキーマを定義する必要があることもわかりました。次のようになります。mapRow
JdbcRDD
def extractValues(r: ResultSet) = {
(r.getInt("Var1"), r.getString("Var2"), ...)
}
val dbRDD = new JdbcRDD(sc, createConnection,
"SELECT * FROM PostgreSQL OFFSET ? LIMIT ?",
0, 1000000, 1, extractValues)
この API は、自分でスキーマを作成するように要求します。さらに悪いことに、これJdbcRDD
をに変換するために同様のことをやり直す必要があります。これSchemaRDD
は非常に扱いにくいコードです。
では、このタスクに最適なアプローチは何かを知りたいですか?