*以下内容由《Spark快速大数据分析》整理所得。

读书笔记的第三部分是讲的是Spark有哪些常见数据源?怎么读取它们的数据并保存。

Spark有三类常见的数据源:

  • 文件格式与文件系统:它们是存储在本地文件系统或分布式文件系统(比如 NFS、HDFS、Amazon S3 等)中的 数据,例如:文本文件、JSON、SequenceFile, 以及 protocol buffer。
  • Spark SQL中的结构化数据源:它针对包括JSON和Apache Hive在内的结构化数据源。
  • 数据库与键值存储:Spark 自带的库和一些第三方库,它们可以用来连接Cassandra、HBase、Elasticsearch以及JDBC源。

一、文件格式与文件系统

1. 文本文件

2. JSON

3. CSV

4. SequenceFile

二、Spark SQL中的结构化数据源

  1. Hive

  2. JSON

三、数据库与键值存储


一、文件格式与文件系统

1. 文本文件
文本文件读取:

# 方法1:文本文件读取
input = sc.textFile("file://home/holden/repos/sparks/README.md")
# 方法2:如果文件足够小,同时读取整个文件,从而返回一个pair RDD,其中键时输入文件的文件名
input = sc.wholeTextFiles("file://home/holden/salesFiles")

文本文件保存:

result.saveAsTextFile(outputFile)

2. JSON
JSON读取:

# JSON读取
import json
data = input.map(lambda x: json.loads(x))

JSON保存:

# JSON保存 - 举例选出喜爱熊猫的人
(data.filter(lambda x: x["lovesPandas"]).map(lambda x: json.dumps(x)).saveAsTextFile(outputFile))
# 保存文本文件
result.SaveAsTextFile(outputFilePath)

3. CSV
CSV读取:

import csv
import StringIO

# CSV读取 - 如果数据字段均没有包括换行符,只能一行行读取
def loadRecord(line):
"""解析一行CSV记录"""
input = StringIO.StringIO(line)
reader = csv.DictReader(input, fieldnames=["name", "favouriteAnimal"])
return reader.next()

input = sc.textFile(inputFile).map(loadRecord)

# CSV读取 - 如果数据字段嵌有换行符,需要完整读入每个文件
def loadRecords(fileNameContents):
"""读取给定文件中的所有记录"""
input = StringIO.StringIO(fileNameContents[1])
reader = csv.DictReader(input, fieldnames=["name", "favoriteAnimal"])
return reader

fullFileData = sc.wholeTextFiles(inputFile).flatMap(loadRecords)

CSV保存:

# CSV保存
def writeRecords(records):
"""写出一些CSV记录"""
output = StringIO.StringIO()
writer = csv.DictWriter(output, fieldnames=["names", "favoriteAnimal"])
for record in records:
writer.writerow(record)
return [output.getvalue()] pandaLovers.mapPartitions(writeRecords).saveAsTextFile(outputFile)

4. SequenceFile

SequenceFile读取:

# sc.sequenceFile(path, keyClass, valueClass)
data = sc.sequenceFile(inFile, "org.apache.hadoop.io.Text", "org.apache.hadoop.io.IntWritable")

SequenceFile保存(用Scala):

val data = sc.parallelize(List(("Pandas", 3), ("Kay", 6), ("Snail", 2)))
data.saveAsSequenceFile(outputFile)

二、Spark SQL中的结构化数据源

用Spark SQL从多种数据源里读取数据:

1. Hive

用Spark SQL连接已有的Hive:
(1.1)需要将hive-site.xml文件复制到 Spark 的 ./conf/ 目录下;
(1.2)再创建出HiveContext对象,也就是 Spark SQL 的入口;
(1.3)使用Hive查询语言(HQL)来对你的表进行查询。

# 例子:用Python创建HiveContext并查询数据
from pyspark.sql import HiveContext hiveCtx = HiveContext(sc)
rows = hiveCtx.sql("SELECT name, age FROM users")
firstRow = rows.first()
print firstRow.name

2. JSON
(2.1)和使用Hive一样创建一个HiveContext。(不过在这种情况下我们不需要安装好Hive,也就是说你也不需要hive-site.xml文件。);
(2.2)使用HiveContext.jsonFile方法来从整个文件中获取由Row对象组成的RDD。
(2.3)除了使用整个Row对象,你也可以将RDD注册为一张表,然后从中选出特定的字段。

# 例子:在Python中使用Spark SQL读取JSON数据
tweets = hiveCtx.jsonFile("tweets.json")
tweets.registerTempTable("tweets")
results = hiveCtx.sql("SELECT user.name, text FROM tweets")

三、数据库与键值存储

关于Cassandra、HBase、Elasticsearch以及JDBC源的数据库连接,详情请参考书本81-86页内容。

3. Spark常见数据源的更多相关文章

  1. Spring:(三) --常见数据源及声明式事务配置

    Spring自带了一组数据访问框架,集成了多种数据访问技术.无论我们是直接通过 JDBC 还是像Hibernate或Mybatis那样的框架实现数据持久化,Spring都可以为我们消除持久化代码中那些 ...

  2. Spark SQL数据源

    [TOC] 背景 Spark SQL是Spark的一个模块,用于结构化数据的处理. ++++++++++++++ +++++++++++++++++++++ | SQL | | Dataset API ...

  3. Spark常见编程问题解决办法及优化

    目录 1.数据倾斜 2.TopN 3.Join优化 预排序的join cross join 考虑Join顺序 4.根据HashMap.DF等数据集进行filter 5.Join去掉重复的列 6.展开N ...

  4. 4. Spark SQL数据源

    4.1 通用加载/保存方法 4.1.1手动指定选项 Spark SQL的DataFrame接口支持多种数据源的操作.一个DataFrame可以进行RDDs方式的操作,也可以被注册为临时表.把DataF ...

  5. ODBC 常见数据源配置整理

    目录 1. 简介 1.1 ODBC和JDBC 1.2 ODBC配置工具 1.3 ODBC 数据源连接配置 2. MySQL 数据源配置 2.1 配置步骤 2.2 链接参数配置 3. SQLServer ...

  6. spark之数据源之自动分区推断

    在hadoop上创建目录/spark-study/users/gender=male/country=US/users.parquet(并且把文件put上去) code: package cn.spa ...

  7. Spark常见错误汇总

    1. Spark Driver cannot bind on port0, SparkContext initialized failed 如果是通过spark-submit等命令行提交的任务,在sp ...

  8. spark常见错误【持续更新】

    错误1.错误: 找不到或无法加载主类 idea.scala代码 idea 导入的scala工程,编写代码后报该错误. 原因:\src\main\scala 包路径下没有将scala这个包设置成Sour ...

  9. spark sql数据源--hive

    使用的是idea编辑器 spark sql从hive中读取数据的步骤:1.引入hive的jar包 2.将hive-site.xml放到resource下 3.spark sql声明对hive的支持 案 ...

随机推荐

  1. ng2 父子组件传值 - 状态管理

    一. 父子组件之间进行直接通话 //父组件html <ul> <app-li [value] = "value" (liClick) = "liClic ...

  2. 多测师讲解RF自动化测试实现流程_高级讲师肖sir

    1.环境搭建过程?­­整套环境需要哪些工具包,以及工具包的作用?因为我搭建的RF框架是基于Python的,所以肯定要先安装Python,python安装完之后,开始安装自动化测试框架rf3.0-在do ...

  3. 2019年CSP-J初赛试题(普及组)试题详解

    https://www.jianshu.com/p/9e58f455c1ee https://blog.csdn.net/weixin_39104847/article/details/1086711 ...

  4. CentOS 7基础命令介绍

    01 CentOS基础命令介绍 重所周知,Linux是一个主要通过命令行来进行管理的操作系统,即通过键盘输入指令来管理系统的相关操作,包括但不限于编辑文件.启动/停止服务等.这和初学者曾经使用的Win ...

  5. 扫描仪扫描文件处理-ABBYY生成小体积黑白二值化PDF

    禁止所有预处理选项: PDF保存选项: 保存提示(选择"保存为仅图像PDF"):

  6. swoft 事件监听和触发 打印sql日志

    需求 打印出swoft的所有sql日志到控制台或者文件 只要打开listener 下面 Dbranlisten.php 里面最后一行注释即可,swoft已经帮我们实现好了 ____ _____ ___ ...

  7. xpath教程-逐层检索和全局检索 转

    逐层检索和全局检索 布啦豆 11203   本节主要介绍用xpath来描述html的层级关系 主要使用到的知识点如下: 单独的一个点 .,表示当前位置 两个点 ..,表示上一级父标签的位置 单独的一个 ...

  8. 第三十六章 Linux常用性能检测的指令

    作为一个Linux运维人员,介绍下常用的性能检测指令! 一.uptime 命令返回的信息: 19:08:17              //系统当前时间 up 127 days,  3:00     ...

  9. Business Partner - 供应商与客户的集成 - S/4HANA(2)

    配置 BP配置 激活BP的PPO请求 Cross-Application Components->Master Data Synchronization->Master Data Sync ...

  10. sql优化整理(一)

    sql的编写语法是这样的: SELECT DISTINCT <select_list> FROM <left_table> <join_type> JOIN < ...