• spark文件读取与保存(scala实现)


    • 文本文件

    将一个文本文件读取为RDD时,输入的每一行都会成为RDD的一个元素。也可以将多个完整的文本文件一次性读取为一个pairRDD, 其中键是文件名,值是文件内容。

    // 读取文本文件
    val input = sc.textFile("filePath")
    // 保存为文本文件
    result.savaAsTextFile(outputFile)
    • JSON

    读取Json最简单的方法是将数据作为文本文件读取,然后使用Json解析器来对RDD中的值进行映射操作。Json的使用需要依赖第三方类库,scala中可以使用Jackson。

    import com.fasterxml.jackson.module.scala.DefaultScalaModule
    import com.fasterxml.jackson.module.scala.experimental.ScalaObjectMapper
    import com.fasterxml.jackson.databind.ObjectMapper
    import com.fasterxml.jackson.databind.DeserializationFeature
    ...
    case class Person(name: String, lovesPandas: Boolean) //Must be a top-level class
    ...
    // Parse it into a specific case class. We use flatMap to handle errors // by returning an empty list (None) if we encounter an issue and a // list with one element if everything is ok (Some(_)). val result = input.flatMap(record => {   try {     Some(mapper.readValue(record, classOf[Person]))   } catch {     case e: Exception => None   }
    })

    保存成Json。

    result.filter(p => P.lovesPandas).map(mapper.writeValueAsString(_))
    .saveAsTextFile(outputFile)

    也可以使用Spark SQL读取Json。

    val input = hiveContext.jsonFile(inputFile)
    • CSV

    读取CSV/TSV数据与Json类似,都需要先作为普通文本来读取数据,再对数据进行处理。与Json一样,CSV也有很多库,scala中可以使用opencsv。

    import Java.io.StringReader
    import au.com.bytecode.opencsv.CSVReader
    ...
    val input = sc.textFile(inputFile)
    val result = input.map{line =>
      val reader = new CSVReader(new StringReader(line));
      reader.readNext();
    }
    • SequenceFile
    // 读取SequenceFile
    val data = sc.sequenceFile(inFile, classOf[Text], classOf[IntWritable]).   map{case (x,y) => (x.toString, y.get())}
    // 保存成SequenceFile
    val data = sc.parallelize(List(("a",1),("b",2),("c",3)))
    data.saveAsSequenceFile(outputFile)
    • DataFrame
    // DataFrame保存成csv文件
    dataFrame.write.format("csv").save("path")
  • 相关阅读:
    洛谷 P1080 [NOIP2012 提高组] 国王游戏
    洛谷 P4370 [Code+#4]组合数问题2
    洛谷 P4369 [Code+#4]组合数问题
    洛谷 P3311 [SDOI2014] 数数
    implicit关键字详解
    模式匹配
    option[T]、Any、Nothing、Null类型的介绍
    高阶函数
    函数的介绍
    集合
  • 原文地址:https://www.cnblogs.com/macyzhang/p/10281353.html
Copyright © 2020-2023  润新知