SparkSQLは、外部のデータソースファイルを読み書き--csv

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

    インポートspark.implicits._ 

    ヴァルDF = spark.read.json(S "$ {BASE_PATH} /people.json")
    
    //将JSON文件数据转化成CSV文件数据
    df.write.mode(SaveMode.Overwrite).CSV(S "$ {} BASE_PATH / CSV ")

    ヴァルcsvDF = spark.read.csv(S" $ {BASE_PATH} / CSV ")。toDF("年齢」、 "名")
    csvDF.show()

    //从ストリング类型中的データセット来创建DATAFRAME 
    ヴァルcsvDS = spark.createDataset(配列( "23、jeffy"、 "34、ケイティ"))
    ヴァルDS = spark.read。CSV(csvDS) 
    ds.show()

    ショー() / * 
    + ---- + ----- + ----- + -------------------- + ----- + 
    | _c0 | _c1 | _c2 | _c3 | _c4 | 
    + ---- + ----- + ----- + -------------------- + ----- +
 
    |年| 作る|モデル| |空白|コメント
    | 2012年|テスラ| S | いいえコメントなし| ヌル| 
    | 1997年| フォード| E350 |目の今1を取りに行きます... | ヌル| 
    | 2015年|シボレー| ボルト| ヌル| ヌル| 
    + ---- + ----- + ----- + -------------------- + ----- + 
     * / 
    ヴァルheaderDF = spark.read.option( "ヘッダ"、真).CSV(S "$ {BASE_PATH} /cars.csv")
    headerDF.printSchema()
    headerDF.write.mode(SaveMode.Overwrite).OPTION( "ヘッダ"、真).CSV(S "$ {BASE_PATH} / headerDF")
    / * 
    ルート
     | -年:文字列()真= NULL可能
     | -作る:文字列(=真)NULL可能
     | -モデル:文字列(真= NULL可能)
     | -コメント:文字列(NULL可能=真)
     | -空白:文字列(真= NULL可能)
     * / 

    headerDF.show()
    / *
    ---- + ----- + ----- + + ----- + -------------------- + 
    |年|メイク|モデル|コメント|空白| 
    + ---- + ----- + ----- + ----- + -------------------- + 
    | 2012 |テスラ| S |いいえコメント|ヌル| 
    | 1997 |フォード| E350 | GET今一度TH ... |ヌル| 
    | 2015 |シボレー|ボルト|ヌル|ヌル| 
    + ---- + - + -------------------- + ----- + --- + ----- 
     * / 

    // 3:InferSchemaは、データから支持を表明推定スキーマ(読み取り専用パラメータ)
    ヴァルinferSchemaDF = 
      .CSV(S "$ {} /cars.csvのBASE_PATH")(真の"InferSchema")(真の"ヘッダ")spark.read.option .OPTION 
    inferSchemaDF.printSchema ()
    / * 
    ルート
     | -年:整数(のNullable = trueに)
     | -メイク:文字列(真= NULL可能)
     | -モデル:文字列(真= NULL可能)
     | -コメント:文字列(真= NULL可能)
     | -空白:文字列(真= NULL可能)
     * / 
    inferSchemaDF.show( )
    / * 
    + ---- + ----- + ----- + -------------------- + ----- + 
    |年| 作る|モデル| |空白|コメント 
    + ---- + ----- + ----- + -------------------- + ----- + 
    | 2012 |テスラ| S | いいえコメントなし| ヌル| 
    | 1997年| フォード| E350 |目の今1を取りに行きます... | ヌル| 
    | 2015年|シボレー| ボルト| ヌル| ヌル| 
    + ---- + ----- + ----- + -------------------- + ----- + 
     * /
 
    // 4:文字セット符号化(デフォルトでは、指定されたエンコーダによれば、CSVファイルのUTF-8)、デコード(読み取り専用パラメータ)であります
    spark.read.option( "ヘッダ"、 "真 ")。オプション( "エンコーディング"、 "ISO-8859-1")。オプション( "9月"、 ""番目)。CSV(S「$ {BASE_PATH} / 8859-1.csv-cars_iso「)。ショー()
    / * 
    + ---- + ----- + ----- + ----------------- + ----- + --- 
    |年|メイク|モデル|コメント|空白| 
    + ---- + ----- + ----- + ----------- + ----- + --------- 
    | 2012年|テスラ| S |いいえコメント|ヌル| 
    | 1997 |フォード| E350 |一つは、今THを取りに行く... |ヌル| 
    | 2015 |シボレー|ボルト|ヌル|ヌル| 
    + ---- + ----- + ----- + -------------------- + ---- - + 
     * / 


    。// 5:引用符(デフォルトは` '')引用符(読み取りおよびパラメータを書き込み)していない切断マークフィールドの値を一緒示し 
    地図=(」引用『optMap VAR - >』\ '『』区切り記号「 - >"「)
    spark.read.options(optMap).CSV(配列(」23ですjeffy唐」 "" 34ケイティ 」).toDS())。ショー() 
    / * 
    + --- + ---------- +
    ショー() / * 
    | _c0 | _c1 | _c2 | _c3 | _c4 | _c5 | 
    + --- + --- + --- + --- + ---- + ------------------- +


 
    + --- + --- + --- + --- + --- - + ------------------- + 
    | 1 | 2 | 3 | 4 | 5.01 | 2015年8月20日15:57である:00 | 
    。。。。| 6 | 7 | 8 | 9 | 0 | 2015-08- 16 21である:58:01 | 
    | 1 | 2 | 3 | 4 | 5 | 2015年8月23日18である:。。。。00:42であります| 
    + --- + --- + --- + --- + ---- + + ------------------- 
     * / 

    // 8:(書き込みパラメータ)
    // ignoreLeadingWhiteSpaceは、フィールドの前にスペースを無視するかどうかを示す値(デフォルトはfalseです)
    // ignoreTrailingWhiteSpaceフィールド値の後にスペースを無視するかどうかを示す(デフォルトはfalse)
    (> "真の" - - > "ignoreTrailingWhiteSpace" "真の" "ignoreLeadingWhiteSpace")optMap =地図
    」(.CSV spark.read.options(optMap)(配列。、B、C「).toDS())ショー()

    // 9:複数行は(デフォルトはfalse)レコードをサポートするかどうか(読み取り専用パラメータ)の複数行の分割読みCSVの解析である
    ヴァルprimitiveFieldAndType SEQ =(
      ""「」 
        |文字列「」整数
        | 
        | 
        | ""ロング
        |
        | " "BigIntegerの"、ダブル、ブール、ヌル""" stripMargin、。
      "" ""これは
        |シンプル
        |。文字列"" 
        | 
        | 10" 、 " 
        | 21474836470" 、 "92233720368547758070"、" 
        | 
        | 1.7976931348623157E308"真"" "stripMargin)。

      primitiveFieldAndType.toDF( "値")を合体(1).write.mode(SaveMode.Overwrite)の.text(S "csv_multiLine_test")。

      spark.read.option("ヘッダ」、TRUE).OPTION( "マルチ"、真).CSV( "csv_multiLine_test")ショー()


    // 10:
    スキーマの新しい新しいStructType =ヴァル()。追加( "A"、IntegerType).add( "B"、TimestampType)
    ヴァルDF1 = spark.read.option( "MODE"、 "PERMISSIVE")。スキーマ(スキーマ).CSV(配列( "0,2013-111-11午前12時13分14秒"、 "1,1983-08-04")のToDS())。
    df1.show()

    // 11:NULLVALUE(デフォルトは空の文字列です)、 NULLVALUEは、指定された文字列のヌル(パラメータの読み書き)に分解する必要が表す
    spark.read.option( " - " "NULLVALUE")。CSV(配列( "0,2013-11-11、 - "、 " ())ショー().. 1,1983-08-04,3「)のToDS 

    nanValue(デフォルト値のNaN 3)(読み取り専用パラメータ):// 12がある
    // positiveInf 
    // negativeInf 
    ヴァル番号= spark.read.format ( "CSV")。スキーマ(StructType(一覧(
        StructField( "INT"、IntegerType、trueに)、
        StructField( "ロング"、LongType、)真、 
        StructField( "フロート"、FloatType、真)、
        StructField( "ダブル"、DoubleType、真)
      )))オプション(地図(。オプション(地図( 
        "ヘッダ" - > "真"、
        "モード" - > "DROPMALFORMED"、
        "NULLVALUE" - > " - "、
        "nanValue" - > "NAN"、
        "negativeInf" - > "-INF"、
        "positiveInf" - > "INF"))は、負荷(S "$ {BASE_PATH} /numbers.csv")
    numbers.show()
    / * 
    + ---- + -------- + ------ --- + --------------- + 
    | int型| ロング| フロート| ダブル| 
    + ---- + -------- + --------- + --------------- + 
    | 8 | 1000000 | 1.042 | 2.38485450374E7 | 
    |ヌル| 34232323 | 98.343 | 184721.23987223 | 
    | 34 | ヌル| 98.343 | 184721.23987223 | 
    | 34 | 43323123 | ヌル| 184721。23987223 | 
    | 34 | 43323123 | 223823.95 | ヌル|
    | 34 | 43323123 | 223823.0 | NaNで| 
    | 34 | 43323123 | 223823。
    | 34 | 43323123 | 223823.0 | -Infinity | 
    + ---- + -------- + --------- + --------------- + 
     * / 

    // 13:CODEC圧縮形式と圧縮は、圧縮形式がサポートされている:
    //なしには、圧縮と非圧縮を意味し
    // BZIP2を、収縮、GZIP、LZ4 、スナッピー( 唯一のパラメータを書き込む)
    inferSchemaDF.write.mode(SaveMode。上書き).OPTION( "圧縮"、 "GZIP")。CSV(S "$ {} BASE_PATH /圧縮")

    // 14 DATEFORMAT(読み取り及びパラメータを書き込む)
    ヴァル= customSchema新しい新しいStructType(配列(StructField( "DATE"、DATETYPE 、真の)))
    ヴァル日付1 = 
      spark.read.option( "DATEFORMAT" ,. "DD / MM / YYYY HH:MM")スキーマ(customSchema).CSV(配列( "26/08/2015 18:00"、 "27/10/2014 18時30")。のToDS())
    日付1。printSchema() 
    / * 
    ルート
      | -日付:日付(真= NULL可能) 
     * /
    。date1.write.mode(SaveMode.Overwrite).OPTION( "DATEFORMAT"、 "YYYY-MM-DD")CSV(S "$ {BASE_PATH} / DATEFORMAT")
    火花。.read.csv(S "$ {BASE_PATH} / DATEFORMAT")を表示()

    // 15:TIMESTAMPFORMAT(读写参数)
    ヴァルtimeSchema =新しいStructType(配列(StructField( "日付"、TimestampType、TRUE)))
    ヴァル時間= 
      spark.read.option( "TIMESTAMPFORMAT"、 "DD / MM / YYYYのHH:MM")スキーマ(timeSchema).CSV(配列( "26/08/2015夜06時"、「27/10/2014 18時30分")トッズ())。
    time.printSchema()
    / * 
    ルート
      | -日付:タイムスタンプ(真= NULL可能)
     * / 
    time.write.mode(SaveMode.Overwrite).OPTION("TIMESTAMPFORMAT」、 "YYYY-MM-DD HH:MM")CSV(S。 "$ {BASE_PATH} / TIMESTAMPFORMAT")
    spark.read.csv(S "$ {} BASE_PATH / TIMESTAMPFORMAT")を表示()

    // 16:maxColumns(デフォルト20480)は、レコードの所定の最大数をCSV(読み取り専用パラメータ)カラム
    spark.read.option ( "maxColumns"、 "3" )。CSV(配列( "試験、G、など"、 "H、BM、S")。TODS())。ショーは()// 与えられ

    spark.stopを()

  } 
}

  

おすすめ

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