SparkSQL读写部数据源——csv文件的读写
1. sep 和 delimiter的功能都是一样,都是表示csv的切割符,(默认是,)(读写参数)
spark.read.option("sep", " ").csv(Seq("jeffy", "katy").toDS()).show() spark.read.option("delimiter", " ").csv(Seq("jeffy", "katy").toDS()).show() ds.write.mode(SaveMode.Overwrite).option("sep", "|").csv(s"${path}")
2. header(默认是false) 表示是否将csv文件中的第一行作为schema(读写参数)
spark.read.option("header", true).csv(s"${path}")
3.inferSchema 表示是否支持从数据中推导出schema(只读参数)
spark.read.option("header", true).option("inferSchema", true).csv(s"${path}")
4.charset和encoding(默认是UTF-8),根据指定的编码器对csv文件进行解码(只读参数)
spark.read.option("header", "true").option("encoding", "iso-8859-1").option("sep", "þ").csv(s"${path}").show()
5.quote(默认值是`"` ) 表示将不需要切割的字段值用quote标记起来(读写参数)
var optMap = Map("quote" -> "\'", "delimiter" -> " ") spark.read.options(optMap).csv(Seq("23 'jeffy tang'", "34 katy").toDS()).show()
6.escape(默认值是`\`) 如果在quote标记的字段值中还含有quote,则用escape来避免(读写参数)
val optMap = Map("quote" -> "\'", "delimiter" -> " ", "escape" -> "\"") spark.read.options(optMap).csv(Seq("23 'jeffy \"'tang'", "34 katy").toDS()).show()
7.comment(默认是空字符串,表示关闭这个功能) 表示csv中的注释的标记符(读写参数)
val optMap = Map("comment" -> "~", "header" -> "false") spark.read.options(optMap).csv(s"${BASE_PATH}/comments.csv").show()
8.(读写参数)
ignoreLeadingWhiteSpace(默认是false) 表示是否忽略字段值前面的空格 /ignoreTrailingWhiteSpace(默认是false) 表示是否忽略字段值后面的空格
val optMap = Map("ignoreLeadingWhiteSpace" -> "true", "ignoreTrailingWhiteSpace" -> "true") spark.read.options(optMap).csv(Seq(" a,b , c ").toDS()).show()
9. multiLine(默认是false) 是否支持一条记录被拆分成了多行的csv的读取解析(类似于execl单元格多行)(只读参数)
spark.read.option("header", true).option("multiLine", true).csv(s"${path}").show()
10. mode(默认是PERMISSIVE) (只读参数)
1) PERMISSIVE 表示碰到解析错误的时候,将字段都置为null
2) DROPMALFORMED 表示忽略掉解析错误的记录
3) FAILFAST 当有解析错误的时候,立马抛出异常
spark.read.option("mode", "PERMISSIVE").schema(schema).csv(s"${path}")
11. nullValue(默认是空字符串), 表示需要将nullValue指定的字符串解析成null(读写参数)
spark.read.option("nullValue", "--").csv(Seq("0,2013-11-11,--", "1,1983-08-04,3").toDS()).show()
12.nanValue(默认值为NaN) (只读参数)
1) positiveInf
2) negativeInf
spark.read.format("csv").schema(StructType(List( StructField("int", IntegerType, true), StructField("long", LongType, true), StructField("float", FloatType, true), StructField("double", DoubleType, true) ))).options(Map( "header" -> "true", "mode" -> "DROPMALFORMED", "nullValue" -> "--", "nanValue" -> "NAN", "negativeInf" -> "-INF", "positiveInf" -> "INF")).load(s"${BASE_PATH}/numbers.csv")
13.codec和compression 压缩格式,支持的压缩格式有:
none 和 uncompressed表示不压缩;
bzip2、deflate、gzip、lz4、snappy (只写参数)
inferSchemaDF.write.mode(SaveMode.Overwrite).option("compression", "gzip").csv(s"${path}")
14.maxColumns(默认是20480) 规定一个csv的一条记录最大的列数 (只读参数)
spark.read.option("maxColumns", "3").csv(Seq("test,as,g", "h,bm,s").toDS()).show() //会报错