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() //会报错

 

posted @ 2020-04-21 16:01  吊车尾88  阅读(4030)  评论(0编辑  收藏  举报