SparkSQLは、外部データソースを書く - JDBCによって読み取らMySQLのデータベース

オブジェクトJdbcDatasourceTest { 
  DEFメイン(引数:配列[文字列]):単位= { 
    ヴァルスパーク= SparkSession 
      .builder()
      .appName( "JdbcDatasourceTest")
      管理組織のビー玉( "ローカル")
      .getOrCreate()

    // URL:http:
    // JDBC :mysqlの://マスター:3306 /テスト
    // JDBC:オラクル://マスター:3306 /テスト
    // JDBC:DB2://マスター:3306 /テスト
    // JDBC:ダービー://マスター:3306 /テスト
    / / JDBC:のSQLServer://マスタ:3306 /試験
    // JDBC:PostgreSQLの://マスタ:3306 /試験
    ヴァルmysqlUrl = "JDBC:MySQLの://マスタ:3306 /試験" 

    // 1:读取CSV文件数据
    ヴァルoptsMap =マップ( "ヘッダ" - > "真"、 "inferSchema" - > "真") 
    ヴァルDF = spark.read.options(optsMap).CSV(S "$ {BASE_PATH} /jdbc_demo_data.csv")
    df.show()

    プロパティプロパティ=新新ヴァル()
    properties.put( "ユーザー"、 "ルート")
    properties.put( "パスワード"、 "ルート")
    MySQLデータベースに//書き込みデータ
    df.write.mode(SaveMode.Overwrite).jdbc (mysqlUrl、 "人"、プロパティ)
    // mysqlデータベースからデータを読み取る
    ヴァルjdbcDFWithNoneOption = spark.read.jdbc(mysqlUrl、 "人"、プロパティ)
    jdbcDFWithNoneOption.show()

    //書き込みデータプロセス:
    // 1:構築されたテーブル
    //書き込むための最初の時間は、あなたは、次のようなtable文の構築をテーブルを作成する必要があります
    。//テーブルtを作成する(文字列名)ENGINE = InnoDBのDEFAULT CHARSET = utf8のAUTO_INCREMENT = 1  
    のInnoDBを使用して// ENGINE = InnoDBエンジンデフォルトCHARSET = UTF8データベースのデフォルトのエンコーディングは、UTF8のAUTO_INCREMENT = 1つの開始シーケンス番号は、インクリメントキーであります
    //。InnoDBは、MySQLデータベースエンジンの一つであり、バイナリAB MySQLのための基準のいずれかを解放する
    //属性の設定ENGINE =のInnoDB DEFAULT CHARSET = utf8のAUTO_INCREMENT = 1つのパラメータが火花を通過させることができるcreateTableOptions 
    VAR writeOpts = 
      ( "createTableOptions" - > "ENGINE = InnoDBのDEFAULT CHARSET = UTF8 AUTO_INCREMENT = 1")地図[文字列、文字列] 
    df.write .mode(SaveMode.Overwrite).OPTIONS(writeOpts).jdbc(mysqlUrl、 "人"、プロパティ)

    // 2:セットテーブルスキーマの
    スキーマ//テーブルは、スパークのタイプフィールドから、一般的に一貫してデータフレームでありますすべてのSQLデータベースに対応するデータ型へのデータ型変換
    //データベースのフィールドタイプは、あなたが望むものではない場合、
    //あなたはcreateTableColumnTypes =年齢の長いパラメータcreateTableColumnTypes、文字列名を設定することができます
    writeOpts =地図[文字列、文字列] - ( "createTableColumnTypesを"> "上記IDロング、ロング年齢言及した")
    df.write.mode(SaveMode.Overwrite).OPTIONS(writeOpts).jdbc(mysqlUrl、 "人"、プロパティ)

    // 3:トランザクション分離レベルは、IsolationLevelを設定していないパラメータで設定されている
    ものをサポートしていません// NONEを1 
    //最初は、このような場合は、最初のテーブルを空にし、次にデータを書き込む、空であるテーブルを切り捨てることです 
    // READ_COMMITTEDは、ダーティリード見えるが、それでも非反復可能読み取りおよびファントム読み取りがあるでしょうではありません
    // REPEATABLE_READ表示されていないダーティ・リードと非反復可能読み取りが、魔法の読みがあるでしょう
    // SERIALIZABLEダーティ読み取り、繰り返し不可の読み込み、およびファントムが発生しない読み込み
    writeOpts =地図[文字列、文字列] (「IsolationLevelをします」 - > "READ_UNCOMMITTED")
    df.write.mode(SaveMode.Overwrite).OPTIONS(writeOpts).jdbc(mysqlUrl、 "人"、プロパティ)

    // 4:書き込みデータ
    処理//書き込みデータがそれぞれ、データのバッチを書き込むために使用することができます書き込むデータの量のバッチサイズは、バッチサイズパラメータ設定することができ、デフォルトは次のとおりです。1000年
    writeOpts =地図[文字列、文字列](「バッチサイズ」 - >「100」)
    df.write.mode(SaveMode.Overwrite).OPTIONS(writeOpts ).jdbc(mysqlUrl、「人」、プロパティ)

    // 5:二回目の書き込みデータが、このタイムテーブルが存在していた、SaveMode区別する必要がある
    //ときSaveMode =上書きしますが、その後、テーブルをクリーンアップする必要がある場合データを書き込みます。クリーンアップテーブル方法は二つに分けられた:
    //二つ目は、このような場合には、テーブルのドロップオフで、最初のドロップテーブル、および、テーブルを構築し、最終的にデータを書き込みます
    //上記の二つのオプションが選択され、パラメータが(デフォルトはfalse)制御を切り捨てることができます。TRUNCATEデータをクリアするために失敗することがありますので、あなたがドロップテーブルの方法を使用することができますので、
    //とされていないすべてのデータベースがPostgresDialectをサポートしていませ表、切り捨てをサポート
    するとSaveMode =追加//を、データがライン上に直接書き込まれる
    // SaveMode = ErrorIfExists時に直接投げる例外
    SaveModeは=無視//は、その後、直接何も行いません
    -地図[文字列、文字列](> "偽" "TRUNCATE")= writeOpts 
    df.write.mode(SaveModeを。上書き).OPTIONS(writeOpts).jdbc(mysqlUrl、「人」、プロパティ)は


    、パーティションフィールドに従って分割されたデータを読み込む// 
    整数型でなければなりません// partitionColumnパーティションフィールド、
    //下界パーティションを決定するために使用ステップのpartitionColumn最小数
    は、UpperBound partitionColumnの最大値//ステップの数は、パーティション決定
    生成されたSQLの単語の各パーティションのために一緒にパーティション// numPartitionsの数、および下界とは、UpperBound

    UpperBound場合// -下界> = numPartitions、我々は、numPartitionsパーティションを取る
    パーティションの下界数-そう私たちはは、UpperBoundを取る// 
    // = 5> 3 8--3我々は3つのパーティションを取る
    //どこID <3 8/3 1 + 1 - 3/3 = 1が来る
    。// WHERE ID> = + 1、ID 3 <3 + 1 + 1 
    // WHERE ID> = + 1 + 1 3 
    //構成実施の形態
    > "partitionColumn" -ヴァルreadOptsはマップ[文字列、文字列]( "numPartitionsを" = "3" - > "ID"、
      "下界" - > "は、UpperBound"" 3" - 「8" > "のFetchSize" - > "100")
    ヴァルjdbcDF = spark.read.options(readOpts).jdbc(mysqlUrl、 "人"、プロパティ)
    jdbcDF.rdd.partitions.size 
    jdbcDF.rdd.glom()。コレクト() 
    jdbcDF.show()

    // APIの方法
    ショー() //各読み出し時間、バッチ方式でデータを読み取るために使用することができ、バッチ番号は、パラメータのFetchSizeによって設定することができます。デフォルト:0、バッチの大きさを推定するためにJDBCドライバを示す
    //読み取りまたは書き込みのいずれかを、パーティション番号の概念があり、
    //読み込み時間は、ユーザーnumPartitionsパラメータ設定により設定され
    、//とパーティションを書きますデータフレームの数は、パーティションの数で
    注意すべき//ポイントは、それが読み取りまたは書き込みされているかどうかのパーティションはあまりすべきではないので、各パーティションは、JDBC接続を開くということです、それ以外の場合は、にデータベースを破壊する
    //書き込み、することができますパーティションの数を減らすためにデータフレームcoaleaseインタフェース



 
    spark.stopを()
  } 
}

  

おすすめ

転載: www.cnblogs.com/tesla-turing/p/11489080.html