1

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スキーマを定義する必要があることもわかりました。次のようになります。mapRowJdbcRDD

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は非常に扱いにくいコードです。

では、このタスクに最適なアプローチは何かを知りたいですか?

4

1 に答える 1