Spark1.x和2.x如何读取和写入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://blog.csdn.net/lzw2016/article/details/85562172

原文地址:https://www.cnblogs.com/qixidi/p/10229242.html

时间: 2024-10-13 11:58:49

Spark1.x和2.x如何读取和写入csv文件的相关文章

python读取并写入csv文件

新建csvData.csv文件 1 import csv 2 3 # 读取csv文件方式1 4 csvFile = open("csvData.csv", "r") 5 reader = csv.reader(csvFile) # 返回的是迭代类型 6 data = [] 7 for item in reader: 8 print(item) 9 data.append(item) 10 11 print(data) 12 csvFile.close() 13 14

python之读取和写入csv文件

写入csv文件源码: 1 #输出数据写入CSV文件 2 import csv 3 data = [ 4 ("Mike", "male", 24), 5 ("Lee", "male", 26), 6 ("Joy", "female", 22) 7 ] 8 9 #Python3.4以后的新方式,解决空行问题 10 with open('d://write.csv', 'w', newline

python读取和写入csv文件

----------------python读取csv文件------------------ #导入csv 创建一个csv文件,输入内容 import csv #1.找到需要被打开的文件路径,通过open打开文件,声明打开的方式,声明编码格式 csv_file=open(r'csv文件路径', mode='r', encoding='utf-8') #2.通过csv模组提供的读取方法来读取打开的文件 csv_data=csv.reader(csv_file) #3.通过for循环遍历读取数据存

c/c++中读取和写入mat文件 --- MAT File I/O Library(二)

本篇记述c/c++中读取mat文件示例 测试数据matioTest.zip下载地址: http://pan.baidu.com/s/1sjPkMsd 1. 读取matioTest.zip中s.mat文件,数据为普通matrix 1 #include <iostream> 2 #include <cassert> 3 #include <matio.h> 4 5 6 int main() 7 { 8 mat_t *matfp; 9 const char* matFileP

Asp.net读取和写入txt文件方法(实例)!

Asp.NET读取和写入txt文件方法(实例)! [程序第一行的引入命名空间文件 - 参考] System; using System.Collections; using System.Configuration; using System.Data; using System.Linq; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.HtmlControls; usi

PHP 读取和导出 CSV文件

PHP 读取和导出 CSV文件,速度比phpexcel快80%,而phpexcel 占内存,在数据大的情况下,5万条只需几秒不到,几乎感觉不出来 如果遇到数字是科学计算法,可以在前面加一个 ' 单引号 /** * 读取CSV文件 * @param string $csv_file csv文件路径 * @param int $lines 读取行数 * @param int $offset 起始行数 * @return array|bool */ public function read_csv_l

Jsoup学习笔记9:Jsoup 解析saz文件,读取其中的htm文件到字符串,提取字符串中的数据写入csv文件中

本篇笔记将上篇笔记的操作做些改进,不再把saz文件中的htm文件解析出来,而是不解压直接读取其中的数据成字符串,基本思路如下: 1.自定义一个从文本文件读取内容到字符串的类:解析saz文件中的htm文档,将文件的内容读取到字符串中 2.自定义利用Jsoup解析htm字符串的类:利用Jsoup解析传入的htm字符串,将解析结果写入csv文件中 3.解析时,指定好文件路径,直接调用上面的两个工具类即可 示例代码如下: package com.daxiang.saztest; /** * 自定义一个从

python读取两个csv文件数据,进行查找匹配出现次数

现有需求 表1 表2 需要拿表1中的编码去表2中的门票编码列匹配,统计出现的次数,由于表2编码列是区域间,而且列不是固定的,代码如下 #encoding:utf-8 ##导入两个CSV进行比对 import csv ##读取编码 def GetQrCode(filePath): #定义一个空的list集合 list = set() csv_file = csv.reader(open(filePath, 'r')) for item in csv_file: # 判断字符串是否为纯数字 if (

用PHP读取Excel、CSV文件

PHP读取excel.csv文件的库有很多,但用的比较多的有: PHPOffice/PHPExcel.PHPOffice/PhpSpreadsheet,现在PHPExcel已经不再维护了,最新的一次提交还是在2017年12月25号,建议直接使用PhpSpreadsheet,而且这两个项目都是同一个组织维护的,本文介绍PhpSpreadsheet的使用. 介绍PhpSpreadsheet PhpSpreadsheet这个库是纯PHP写的,提供了非常丰富的类和方法,而且支持很多文件格式: 环境要求