Spark基础(5)文件数据读写

本文介绍了使用Scala进行数据处理,包括本地文件系统、HDFS和HBase的数据读写操作,以及如何解析JSON数据。详细展示了如何利用Spark读取不同来源的数据,并提供了JSON解析的具体代码示例。
  • 本地文件系统的数据读写
scala> val textFile = sc.textFile("file:///usr/local/spark/mycode/wordcount/word.txt")
scala> textFile.saveAsTextFile("file:///usr/local/spark/mycode/wordcount/writeback.txt")
  • 分布式文件系统HDFS的数据读写
scala> val textFile = sc.textFile("hdfs:///localhost:9000/user/hadoop/word.txt")
scala> textFile.first() // 行动操作触发转换操作

scala> val textFile = sc.textFile("word.txt")
scala> textFile.saveAsTextFile("writeback.txt")
  • JSON文件数据读写

JSON是一种轻量级的数据交换格式。把本地文件系统中的people.json文件加载到RDD中

scala> val jsonStr = sc.textFile("file:///usr/local/spark/examples/src/main/resource/people.json")
scala> jsonStr.foreach(println)

编写程序完成对JSON数据的解析工作。Scala中有一个自带的JSON库:scala.util.parsing.json.JSON,可以实现对JSON数据的解析。

JSON.parseFull(jsonString:String)函数,以一个JSON字符串作为输入并进行解析,如果解析成功则返回一个some(map: Map[String, Any]),如果解析失败则返回None。

在testjson.scala代码文件中输入以下内容

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 = "pathToFile"
        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)
    }
})
}
}

将整个程序打包成JAR包,通过spark-submit程序运行(运行后可得到结果输出信息)

$ /usr/local/spark/bin/spark-submit --class "JSONApp"
$ /usr/local/spark/mycode/json/target/scala-2.11/json-project_2.11-1.0.jar
  • 读写HBase数据

HBase是google的BigTable开源实现的原版。

HBase是一个稀疏、多维度、排序的映射表,这张表的索引是行键、列键、列限定符和时间戳。

每个值是一个未经解释的字符串,没有数据类型。

用户在表中存储数据,每一行都有一个可排序的行键和任意多的列。

时间戳:每个单元格都保存着同一份数据的多个版本,这些版本采用时间戳进行索引。

列项定符:列族里面的数据通过列限定符(或列)来定位。

单元格:在HBase表中,通过行、列族和列限定符确定一个“单元格”(cell),单元格中存储的数据没有数据类型,总被视为字节数组byte[ ]。

HBase中需要根据行键列族列限定符时间戳来确定一个单元格,因此可以视为“四维坐标”。

  • 创建一个HBase表

HBase数据库安装教程:厦门大学数据库实验室

(相关读数据,写数据等暂时没看)

 

### 读写方法 #### 读取文件Spark on Hive 中,可借助 SparkSession 读取 Hive 表的数据。以下是一个示例代码,展示了如何读取 Hive 表: ```python from pyspark.sql import SparkSession spark = SparkSession.builder \ .appName("ReadHiveTable") \ .enableHiveSupport() \ .getOrCreate() # 读取 Hive 表 df = spark.sql("SELECT * FROM your_hive_table") df.show() ``` #### 写入文件 要将数据写入 Hive 表,可创建临时表,再通过 SQL 语句将临时表的数据插入到目标 Hive 表中。示例代码如下: ```python from pyspark.sql import SparkSession spark = SparkSession.builder \ .appName("WriteToHiveTable") \ .enableHiveSupport() \ .getOrCreate() # 初始化要写入 Hive 表的数据集 # 这里假设从文件读取数据 data = spark.read.csv("your_file_path") data.createOrReplaceTempView("srcTable") # 将临时表数据写入 Hive 表 spark.sql("INSERT INTO your_hive_table SELECT * FROM srcTable") ``` ### 读写原理 #### 读取原理 Spark on Hive 读取文件时,主要借助 Hive Metastore 来扩充数据源,降低分布式文件的管理与维护成本,如路径管理、分区管理、Schema 维护等。Spark 本身是执行引擎,但缺乏元数据管理功能。借助 Hive 的 metastore 服务,Spark 能获取表位置,然后由 Spark SQL 解释器将 SQL 翻译成 RDD 代码执行。当执行 SQL 查询时,Spark 从 Hive Metastore 获取表的元数据信息,如字段名、数据类型、表的存储位置等,再根据这些信息从相应的存储位置读取数据[^1][^2]。 #### 写入原理 写入数据时,Spark 先将数据加载到内存中的 DataFrame 或 RDD 中,创建临时表。接着,通过执行 SQL 插入语句,将临时表的数据写入到 Hive 表对应的存储位置。Hive 会依据自身的存储格式(如 ORC、Parquet 等)将数据存储到 HDFS 或其他分布式文件系统中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值