`

Spark 中读取csv文件(或其他分隔符分割的文件)

阅读更多
注:所有需要的包都可以通过http://search.maven.org 中搜索包名(比如spark-csv)进行下载;
spark2中已经包含了这些包,直接用即可,而且支持同时读取多文件夹下的文件
参见:https://stackoverflow.com/questions/37639956/how-to-import-multiple-csv-files-in-a-single-load

示例代码:
    val conf = new SparkConf().setAppName("word count").setMaster("local[1]")
    val sc = new SparkContext(conf)
    println("spark version: " + sc.version)
    sc.setLogLevel("WARN") //http://stackoverflow.com/questions/27781187/how-to-stop-messages-displaying-on-spark-console
    val spark = new SQLContext(sc)
    import spark.implicits._
    val df = spark.read.format("com.databricks.spark.csv")
      .option("header", "true")
      .option("inferSchema", "false") //是否自动推到内容的类型
//        .option("delimiter"," ")  //分隔符,默认为 , 
      .load(csv_file_name)
    df.show()


以上的代码只能够读取一个文件夹下的文件,如果要同时读取多个文件夹下的文件,在spark1.6中可以这么干:
    def readMultiCSV(paths: Seq[String], delimiter: String=",",hasHeader:Boolean=false): DataFrame = {
//      在spark2.0之后可以用如下的方法,而且支持多个文件夹,参见https://stackoverflow.com/questions/37639956/how-to-import-multiple-csv-files-in-a-single-load
//      spark.read.format("csv").option("header", "true").load("../Downloads/*.csv")
//      spark.read.option("header", "true").csv(paths)
      var df = spark.read.format("com.databricks.spark.csv")
        .schema(customSchema)
        .option("header", hasHeader.toString)
        .option("inferSchema", "false") //是否自动推到内容的类型
        .option("delimiter", delimiter) //分隔符,默认为 ,
        .load(paths(0))
      for(i<-1 until paths.length){
        val df_tmp=spark.read.format("com.databricks.spark.csv")
          .schema(customSchema)
          .option("header", hasHeader.toString)
          .option("inferSchema", "false") //是否自动推到内容的类型
          .option("delimiter", delimiter) //分隔符,默认为 ,
          .load(paths(i))
        df=df.unionAll(df_tmp)
      }
      df
    }





方法1、直接下载所需的jar包

需要用到的包spark-csv
   源码:https://github.com/databricks/spark-csv
   以上github页面中还有使用方法(各种选项)等信息
   编译好的jar(注意选择相应的scala版本的包):



此外,spark-csv还依赖两个包:
http://search.maven.org/remotecontent?filepath=com/univocity/univocity-parsers/1.5.1/univocity-parsers-1.5.1.jar
http://search.maven.org/remotecontent?filepath=org/apache/commons/commons-csv/1.1/commons-csv-1.1.jar


方法2、通过maven自动管理依赖

在工程的pom.xml中添加如下依赖即可:
        <dependency>
            <groupId>com.databricks</groupId>
            <artifactId>spark-csv_${scala.version}</artifactId>
            <version>1.5.0</version>
            <scope>compile</scope>
        </dependency>



参考资料:
https://stackoverflow.com/questions/30757439/how-to-add-any-new-library-like-spark-csv-in-apache-spark-prebuilt-version
https://github.com/databricks/spark-csv/issues/326
分享到:
评论

相关推荐

    SparkSQL 使用SQLContext读取csv文件 分析数据 (含部分数据)

    在Spark SQL中,读取CSV文件的基本步骤如下: 1. **创建SQLContext**:在Scala、Java或Python环境中,你需要先创建一个SQLContext实例。例如,在Scala中,你可以使用以下代码: ```scala import org.apache.spark...

    spark-csv2mongodb:一个可扩展的库,允许使用spark 2.4.6将csv数据加载到mongodb中

    2. 使用SparkSession的`read.format("csv")`方法读取CSV文件,可以设置分隔符、是否包含列头等参数。 3. 将读取到的DataFrame转换成适合MongoDB的格式,例如,如果CSV文件中的数据需要映射到MongoDB的不同集合或文档...

    ee-2016.9.zip

    Spark CSV库还提供了其他高级特性,如处理缺失值、自定义分隔符、处理嵌套CSV等。此外,它还支持在读取时自动推断数据类型,这大大简化了数据预处理的过程。对于写入CSV文件,同样可以通过DataFrame的`write`方法...

    Spark统计电影评分数据:movies.dat,retings.dat,users.dat

    首先,需要将这些CSV格式的数据转换为DataFrame,可以使用`spark.read.csv()`函数,指定适当的分隔符。然后,可以通过列名来访问和操作数据,例如,筛选出评分高于4分的电影,或者按用户年龄和性别分组统计平均评分...

    大数据-- Apache Spark Semi-Structured data

    - **分隔符和转义字符**:对于表格数据尤其重要。 - **压缩、加密和校验和**:提高传输效率和数据安全性。 - **模式演进**:随着时间的推移如何更新数据结构。 #### 半结构化表格数据 半结构化数据是一种非常...

    Spark实现用户订单数据表连接

    1. **加载数据**:使用 `spark.read.format("csv").load()` 或其他数据源读取函数,将用户信息表和订单信息表加载为 DataFrame。确保指定合适的分隔符、列名等参数。 2. **创建数据表**:定义 DataFrame 的别名,...

    SparkSQL在ETL中的应⽤用.pdf

    - **CSV/Text文件**:可以使用`spark.read`方法加载CSV或文本文件,并指定分隔符、是否包含表头等选项。 - **Parquet/Avro/ORC**:这些是高效的列式存储格式,适用于大规模数据处理场景。 - **JDBC连接**:通过...

    CSV

    CSV文件用纯文本形式存储表格数据,每一行代表一条记录,各列数据之间用特定的分隔符(通常是逗号)进行区分。 在CSV文件中,每一行代表一个数据记录,每列则对应记录中的一个字段。例如,一个简单的CSV文件可能...

    search-log.rar

    2. **数据解析**:由于日志文件通常有固定的格式,我们需要通过`split()`函数或其他分隔符解析每一行,将原始字符串转换为有意义的列。 3. **数据清洗**:去除空值、异常值,处理缺失数据,确保数据质量。 4. **数据...

    Spark SQL数据加载和保存实例讲解

    - 数据转换:在加载数据前,可以使用`option()`方法设置额外的参数,如编码、分隔符等。 - 分区保存:在保存数据时,可以使用`partitionBy()`方法指定分区字段,提高查询效率。 - 表管理:Spark SQL可以通过`...

    100万个email地址

    我们可以通过`pandas.read_csv()`函数读取txt文件,虽然它通常用于CSV格式,但也可以处理分隔符为换行符的纯文本文件。然后,我们可以创建一个DataFrame来存储邮件地址,并利用DataFrame的内置函数进行数据操作。 `...

    字符串报文解析函数

    给定的代码片段展示了一个名为`split`的函数,其主要功能是将一个源字符串按照指定的分隔符进行分割,并将分割后的子字符串保存到一个`vector&lt;string&gt;`类型的容器中。这个过程称为字符串的“拆分”或“解析”,是...

    Talend基础知识.zip

    例如,tOracleInput组件用于从Oracle数据库中读取数据,tFileInputDelimited则用于处理CSV或TSV等分隔符文件。 2. **目标组件(Targets)**:与源组件相反,目标组件负责将数据加载到最终目的地,如数据库、文件...

    排序文件

    例如,CSV文件可以使用逗号作为分隔符,而JSON或XML文件则需要解析其结构。Java库,如OpenCSV和Jackson,可以帮助处理这些格式。 总之,Java提供了强大的工具和库来处理排序文件的任务,无论文件大小如何。理解并...

    数据分析与可视化数据.zip

    这类数据通常由逗号或制表符分隔,便于使用编程语言如Python的Pandas库进行读取。Pandas提供了read_csv或read_table函数,能够方便地将文本数据转化为DataFrame对象,这是Pandas处理数据的核心结构。在读入数据后,...

    schemer:CSV,TSV,JSON,AVRO和Parquet架构的架构注册表。 支持模式推断和GraphQL API

    1. CSV(Comma Separated Values):一种通用的文本文件格式,用于存储表格数据,如电子表格或数据库,便于读取和写入。 2. TSV(Tab Separated Values):与CSV类似,但使用制表符分隔字段,适用于处理包含逗号的...

    SJ信令数据_049

    .txt文件格式通常用于纯文本数据,这意味着数据可能以一种易于读取和处理的结构,如CSV(逗号分隔值)或TSV(制表符分隔值)的形式存在。 信令数据的主要知识点包括: 1. **信令协议**:移动通信中的信令主要遵循...

Global site tag (gtag.js) - Google Analytics