IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Spark 读取CSV文件为RDD -> 正文阅读

[大数据]Spark 读取CSV文件为RDD

Spark 读取CSV文件为RDD

1 准备数据

在开始之前,假设我们在文件夹“c:/tmp/files”中有以下带有逗号分隔文件内容的 CSV 文件名,我使用这些文件来演示示例。

Before we start, let’s assume we have the following CSV file names with comma delimited file contents at folder “c:/tmp/files” and I use these files to demonstrate the examples.

文件名文件内容
text01.csvCol1,Col2 One,1 Eleven,11
text02.csvCol1,Col2 Two,2 Twenty One,21
text03.csvCol1,Col2 Three,3
text04.csvCol1,Col2 Four,4

2 加载CSV文件为RDD

textFile() method read an entire CSV record as a String and returns RDD[String], hence, we need to write additional code in Spark to transform RDD[String] to RDD[Array[String]] by splitting the string record with a delimiter.

textFile() 方法将整个 CSV 记录作为字符串读取并返回 RDD[String],因此,我们需要在 Spark 中编写额外的代码,通过将字符串记录拆分为 RDD[String] 到 RDD[Array[String]] 分隔符。

下面的示例将文件读入“rddFromFile”RDD 对象,RDD 中的每个元素都表示为一个字符串。

The below example reads a file into “rddFromFile” RDD object, and each element in RDD represents as a String.

object CSVDataDemo {
  def main(args: Array[String]): Unit = {

    val spark: SparkSession = SparkSession.builder()
      .appName("csvDemo")
      .master("local").getOrCreate()
    /** 使用textfile方法读取csv数据 */
    val RDD: RDD[String] = spark.sparkContext.textFile("InData/SparkScalaExampleData/CSVData02/*")
    val RDD1: RDD[Array[String]] = RDD.map{f => f.split(",")}

    //遍历数据
    RDD1.foreach(f=>{
      println("Col1:"+f(0)+",Col2:"+f(1))
    })
    /*
    * Col1:Col1,Col2:Col2 One
      Col1:Col1,Col2:Col2  Two
      Col1:Col1,Col2:Col2
      Col1:Col1,Col2:Col2
    * */
    

  }

}

3 读取 CSV 文件时跳过标题

When you have a header with column names in a CSV file and to read and process with Spark RDD, you need to skip the header as there is no way in RDD to specify your file has a header.

当您在 CSV 文件中有包含列名的标题并使用 Spark RDD 读取和处理时,您需要跳过标题,因为 RDD 中无法指定您的文件具有标题。

object CSVDataDemo {
  def main(args: Array[String]): Unit = {

    val spark: SparkSession = SparkSession.builder()
      .appName("csvDemo")
      .master("local").getOrCreate()

    /** 使用textfile方法读取csv数据 */
    /*
    假设读取的CSV数据带有列名,
    * A	  B	   C 	  D
      Col1	Col2	four 	4

    * */
    val RDD: RDD[String] = spark.sparkContext.textFile("InData/SparkScalaExampleData/CSVData02/header.csv")
    val RDDCSV: RDD[Array[String]] = RDD.map{f => f.split(",")}
    println("--------原始csv数据---------")
    RDDCSV.foreach(f => println(f.mkString(",")))
    /*过滤第一行的数据*/
    val re: RDD[Array[String]] = RDDCSV.mapPartitionsWithIndex { (idx, iter) =>
      //行数为零时,删除
      if (idx == 0) iter.drop(1) else iter
    }
    println("--------原始csv数据删除第一行后---------")
    re.foreach(f => println(f.mkString(",")))
    /*
    * 
    * --------原始csv数据---------
      A,B,C,D
      Col1,Col2,four,4
      --------原始csv数据删除第一行后---------
      Col1,Col2,four,4
    * */
  }

}

4 将多个 CSV 文件读入 RDD

To read multiple CSV files in Spark, just use textFile() method on SparkContext object by passing all file names comma separated. The below example reads text01.csv & text02.csv files into single RDD.

要在 Spark 中读取多个 CSV 文件,只需在 SparkContext 对象上通过传递所有 文件名逗号分隔。 下面的示例将 text01.csv 和 text02.csv 文件读入单个 RDD。

object CSVDataDemo {
  def main(args: Array[String]): Unit = {

    val spark: SparkSession = SparkSession.builder()
      .appName("csvDemo")
      .master("local").getOrCreate()

    /** 使用textfile方法读取两个csv数据 */

    
    val rdd4 = spark.sparkContext.textFile("InData/SparkScalaExampleData/CSVData02/text01.csv" +
      ",InData/SparkScalaExampleData/CSVData02/text02.csv")
    //遍历结果
    rdd4.foreach(f=>{
      println(f)
    })
    /*
    * 
    * Col1,Col2 One,1 Eleven,11
      Col1,Col2  Two,2 Twenty One,21
    * */
    
  }

}

5 将目录中的所有CSV文件读入RDD

To read all CSV files in a directory or folder, just pass a directory path to the testFile() method.

要读取目录或文件夹中的所有 CSV 文件,只需将目录路径传递给 testFile() 方法。

object CSVDataDemo {
  def main(args: Array[String]): Unit = {

    val spark: SparkSession = SparkSession.builder()
      .appName("csvDemo")
      .master("local").getOrCreate()

    /** 使用textfile方法读取文件夹下所有csv数据 */


    val rdd4 = spark.sparkContext.textFile("InData/SparkScalaExampleData/CSVData02/*")
    //遍历结果
    rdd4.foreach(f=>{
      println(f)
    })
    /*
    *
    * A,B,C,D
      Col1,Col2,four,4
      Col1,Col2 One,1 Eleven,11
      Col1,Col2  Two,2 Twenty One,21
      Col1,Col2,Three,3
      Col1,Col2,four,4
    * */

  }

}

6 总结

In this tutorial you have learned how to read a single CSV file, multiples CSV files and reading all CSV files from a directory/folder into a single Spark RDD. You have also learned how to skip the header while reading CSV files into RDD.

在本教程中,您学习了如何读取单个 CSV 文件、多个 CSV 文件以及将目录/文件夹中的所有 CSV 文件读取到单个 Spark RDD 中。 您还学习了如何在将 CSV 文件读入 RDD 时跳过标题。

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-06-01 15:18:23  更:2022-06-01 15:21:15 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 20:12:48-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码