SparkSQLを使用して、JDBCを介してMySQL、Oracle、Greenplumなどを接続し、データの操作を実現する必要がある場合、データテーブルの全量をロードする必要がない場合があります。次に例を示します。
条件に従ってフィルタリングする必要があるフィールドは一部だけです。
現時点では、JDBCに接続するときにオプション( "dbtable"、tablename)属性の値を変更する必要があります。sparkの公式Webサイトにある属性の概要を参照してください:(spark2.3 jdbc-他のデータベースへの詳細な属性リンク)
プロパティ名意味
url接続するJDBC URL。ソース固有の接続プロパティは、URLで指定できます。例:jdbc:postgresql:// localhost / test?user = fred&password = secret
dbtable読み取る必要のあるJDBCテーブル。SQLクエリのFROM句で有効なものはすべて使用できることに注意してください。たとえば、完全なテーブルの代わりに、括弧でサブクエリを使用することもできます。
driverこのURLへの接続に使用するJDBCドライバーのクラス名。
…………
dbtable:取得されたJDBC表。また、完全な表ではなく、括弧内で子句を使用することもできます。
テストコードは次のとおりです。
オブジェクトJDBCSource {
def main(args:Array [String]):Unit = {
val conf = new SparkConf()。setAppName( "Greenplum_test")。setMaster( "local [*]")
val sc = new SparkContext(conf)
sc .setLogLevel( "WARN")
val spark = SparkSession.builder()。config(conf).getOrCreate()
// dbtableがSELECTステートメントのソースとして使用されるため。サブクエリステートメントを入力する場合は、エイリアスを指定する必要があり
ます:val tablename = "(select id、name、gender from test.info where gender = 'man')temp"
val data = spark.sqlContext.read
.format( "jdbc ")
.option(" driver "、" com.mysql.jdbc.Driver ")
.option(" url "、" jdbc:mysql:// localhost:3306 / test "
.option( "user"、 "username").
option( "password"、 "password").
load()
data.show()
}
}