Spark1.x和2.x如何读取和写入csv文件

本文介绍了如何在Spark 1.x和2.x中读取和写入CSV文件,包括通过sc.textFile和Spark SQL的方式。在Spark 2.x中,CSV已成为内置数据源,简化了操作。同时,文章提到了不同版本中读写CSV的差异,并分享了一个包含学习资源的项目链接。

看很多资料,很少有讲怎么去操作读写csv文件的,我也查了一些。很多博客都是很老的方法,还有好多转来转去的,复制粘贴都不能看。下面我在这里归纳一下,以免以后用到时再费时间去查

通过sc.textFile

val input = sc.textFile("test.csv")
val result = input.map { line =>
    val reader = new CSVReader(new StringReader(line));
    reader.readNext()
}
// 创建了RDD

确实这样操作可以读取,但是根据csv文件的格式能够发现不方便后续操作,官方也建议通过Spark SQL来操作读写csv

怎么写?顺便提一句吧rdd.toDF.write.csv(...),要引入隐式操作import spark.implicits._

通过SparkSQL读取csv文件

在 spark 1.x 中,读写csv使用了第三方库 spark-csv,由 databricks 提供。 但在 spark 2.0中,将 csv 作为一个内置的源代码。 这个决定主要是由于 csv 是企业中使用的主要数据格式之一。因此迁移到 spark 2.0时,需要将代码移动到使用构建在 csv 源代码中的代码,而不是使用第三方代码

1.x版本Spark SQL内置支持三种格式数据源:parquet(默认)、json、jdbc,所以读取csv文件需要依赖com.databricks.spark.csv

// spark是SparkSession对象
val df = spark.read
        .format("com.databricks.spark.csv")
        .option("header", "true") //reading the headers
        .option("mode", "DROPMALFORMED")
        .load("csv/file/path"); //.csv("csv/file/path") //spark 2.0 api

df.show()

2.x后也内置了csv的解析器,也可以简单滴使用csv(),
val df=spark.read.format("csv").option("header", "true").option("mode", "DROPMALFORMED").csv("csv/file/path")

val spark = SparkSession.builder().appName("fileRead").getOrCreate()
        import spark.implicits._
        val data1 = spark.read
            //          推断数据类型
            .option("inferSchema", "true")
            //		   可设置分隔符,默认,
            //.option("delimiter",",")
            //          设置空值
            .option("nullValue", "?")
            //          表示有表头,若没有则为false
            .option("header", true)
            //          文件路径
            .csv("test.csv")
        //          打印数据格式
        data1.printSchema()
        //      显示数据,false参数为不要把数据截断
        data1.show(false)

通过SparkSQL写csv

//1.x
data.write.format("com.databricks.spark.csv")
	.option("header", "false")//在csv第一行有属性”true”,没有就是”false”
	.option("delimiter",",")//默认以”,”分割
	.save(outpath/test.csv)
//2.x
data.write
    .option("header", "true")
    .csv("outpath/test.csv")

貌似确定是否有头部那块写true或者字符串"true"都可以

可以参考 stackmirror 上这两个讨论:


厚脸皮自荐一个项目吧,https://github.com/josonle/Coding-Now

归纳总结了学习记录的一些笔记,视频资源,以及所看得一些电子书eBooks和平常收纳的一些自己认为比较好的博客、网站、工具。
面向爬虫、数据分析、机器学习及深度学习、大数据、算法、数据库等多个方面,项目一直维护,希望大家来赏个眼,谢谢
类似这些:在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


发现有些网站真的是恶心,转我文章还不标准出处
版权声明:本文为博主原创文章,未经博主允许不得转载。https://blog.csdn.net/lzw2016/article/details/85562172

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值