オブジェクト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を() } }