在前面我们演示sparksql读取json文件和csv文件的时候,我们了解到json文件会自动映射schema,但是在csv格式的文件或者其他text文件的时候,有时候是没有字段名的,首行就是数据,那么在读取的时候,如果没有手动传递schema的话,则spark会自动对字段等等进行推测。在生产上我们一般不怎么做,我们会自定义一个schema传递进去,这样的好处有:
1、减轻了Spark推断数据类型的压力。 2、可以防止 Spark 仅为了读取文件的大部分以确定模式而创建单独的作业,这对于大型数据文件来说是昂贵和耗时的。 3、如果数据与模式不匹配,可以尽早发现错误。 4、在使用的时候,自定义的schema名称更具有可读性
所以切记,在生产环境下,我们一般会手动的给spark应用程序传递schema。下面列举一下手动编写schema的示例:
val schema = StructType(Array( StructField("name", StringType, false), StructField("age", IntegerType, false), StructField("sex", StringType, false) )) session.read.format("csv").schema(schema) .option("header","false") .load("C:\\Users\\Administrator\\Desktop\\fsdownload\\user.csv")
备注:
1、这里的手动定义schema不仅是csv用,也可以是json格式的文件使用。json文件的话更多的减少数据类型的推断的消耗。
还没有评论,来说两句吧...