Spark编程-读文件与写文件

读写本地文件

读取本地文件

val textFile = sc.textFile("file:///usr/local/wordcount/word.txt")

textFile.first()

        加载本地文件,必须采用“file:///”开头的这种格式,执行上上面这条命令以后,并不会马上显示结果,因为,Spark采用惰性机制,只有遇到“行动”类型的操作,才会从头到尾执行所有操作。所以,下面我们执行一条“行动”类型的语句,就可以看到结果,

        first()是一个“行动”(Action)类型的操作,会启动真正的计算过程,从文件中加载数据到变量textFile中,并取出第一行文本。

写入本地文件

textFile.saveAsTextFile("file:///usr/local/wordcount/writeback.txt")

  saveAsTextFile()是一个“行动”(Action)类型的操作,所以,马上会执行真正的计算过程。

读写HDFS文件

读取HDFS文件

//等价的
val textFile = sc.textFile("hdfs://localhost:9000/user/hadoop/word.txt")
val textFile = sc.textFile("/user/hadoop/word.txt")
val textFile = sc.textFile("word.txt")
//执行行动类算子
textFile.first()

写HDFS文件

把textFile的内容写回到HDFS文件系统中(写到hadoop用户目录下)

val textFile = sc.textFile("word.txt")
textFile.saveAsTextFile("writeback.txt")

本地文件系统加载与写入到RDD

val rdd = sc.textFile("file:///usr/local/spark/mycode/wordcount/word.txt")

rdd.saveAsTextFile("file:///usr/local/spark/mycode/wordcount/outputFile")

读写JSON数据

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。

读取JSON文件

val jsonStr = sc.textFile("file:///usr/local/spark/examples/src/main/resources/people.json")

jsonStr.foreach(println)
{"name":"Michael"}
{"name":"Andy", "age":30}
{"name":"Justin", "age":19}

        json文件加载到RDD中以后,在RDD中存在三个字符串。我们下面要做的事情,就是把这三个JSON格式的字符串解析出来,比如说,第一个字符串{"name":"Michael"},经过解析后,解析得到key是"name",value是"Michael"。

        现在我们编写程序完成对上面字符串的解析工作。Scala中有一个自带的JSON库——scala.util.parsing.json.JSON,可以实现对JSON数据的解析。

        JSON.parseFull(jsonString:String)函数,以一个JSON字符串作为输入并进行解析,如果解析成功则返回一个Some(map: Map[String, Any]),如果解析失败则返回None。因此,可以使用模式匹配来处理解析结果.

import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConf
import scala.util.parsing.json.JSON

object JSONApp {
    def main(args: Array[String]) {
        val inputFile =  "file:///usr/local/spark/examples/src/main/resources/people.json"
        val conf = new SparkConf().setAppName("JSONApp")
        val sc = new SparkContext(conf)
        val jsonStrs = sc.textFile(inputFile)
        val result = jsonStrs.map(s => JSON.parseFull(s))
        result.foreach( {r => r match {
                        case Some(map: Map[String, Any]) => println(map)
                        case None => println("Parsing failed")
                        case other => println("Unknown data structure: " + other)
                }
        }
        )

    }
}

参考博客:

Spark2.1.0入门:文件数据读写_厦大数据库实验室博客

你可能感兴趣的:(Spark,spark,大数据,分布式)