PySpark大数据分析(6):数据读写

文件读写

读写文本文件

PySpark可以直接将一个文本文件读取进来,变成一个RDD,将文件的每一行作为RDD中的一个元素。比如读取一个Markdown文件:

from pyspark import SparkConf, SparkContext


conf = SparkConf().setMaster('local').setAppName('MyApp')
sc = SparkContext(conf=conf)

rdd = sc.textFile('/Users/data/README.md')

使用saveAsTextFile()可以将数据保存为文本文件。PySpark会将传入路径作为文件夹,从多个节点在其下并行输出多个文件,因此数据的每一个部分输出到哪个文件中往往是不受控的。

rdd.saveAsTextFile('/Users/data/output_folder')

读写JSON文件

PySpark可以通过SparkSession直接读取JSON文件,在之前的文章《PySpark大数据分析(1):Spark的安装与文件读取》中有Yelp数据集的例子。如果需要使用RDD完成操作的话,则可以用文本读写的方式加上JSON的序列化库共同完成。

import json


# read json file
rdd = sc.textFile('/Users/data/archive/yelp_academic_dataset_review.json')
# parse the file
yelp = rdd.map(lambda x: json.loads(x))
# save rdd as a json file
yelp.map(lambda x: json.dumps(x)).saveAsTextFile('yelp.json')

读写CSV文件

和JSON文件一样,CSV格式的文件也可以通过文本文件读写结合解析CSV格式的库的方式完成读写操作,或者使用SparkSession直接读取变成DataFrame。

读写SequenceFile

SequenceFile是Hadoop常用格式的一种。由于Hadoop的设计是用来存储大文件的,大量的小文件存储会产生大量的元信息,导致Hadoop存储压力上升。因此,Hadoop使用了SequenceFile以二进制键值对的方式对小文件进行集中管理。在结构上,SequenceFile有一个header与多个record组层。其中header用于存放键值的类、压缩算法、同步标记等等,PySpark可以依靠同步标记并行读取SequenceFile;record存储记录长度、键的长度、键、以及值。在SparkContext中,可以调用sequenceFile()读取SequenceFile,调用时除了指定路径外,还需要注意这里的键值都是Hadoop的Writable类。

data = sc.sequenceFile(
    path='/Users/data/sequence_file', 
    keyClass='org.apache.hadoop.io.Text', 
    valueClass='org.apache.hadoop.io.IntWritable'
)

将PySpark中的一个RDD保存为SequenceFile同样可以直接调用API,同时还可以指定Hadoop的编码方式,默认为None。

data.saveAsSequenceFile(path='sequence_file', compressionCodecClass='org.apache.hadoop.io.compress.GzipCodec')

读写对象文件

Hadoop输入输出格式

文件压缩

文件系统读写

Amazon S3

HDFS

Spark SQL

Spark SQL可以处理传入的SQL查询,并返回一个由Row对象组成的RDD作为查询的结果。在PySpark中,我们可以使用row[column_number]或者row.column_name访问指定元素。

Hive

Hive是最常见的结构化数据源之一,使用Spark SQL连接Hive需要将Hive的配置文件hive-site.xml放到Spark的配置目录下,一般为/etc/spark/conf/。配置完成后,创建HiveContext对象,就可以使用HQL进行查询了。返回值是由Row组成的RDD。

from pyspark.sql import HiveContext


hiveCtx = HiveContext(sc)
rows = hiveCtx.sql('SELECT UserID, Gender FROM users')
print(rows.first().UserID)
# 1

Parquet

JSON

数据库

JDBC

Cassandra

HBase

Elasticsearch

上一篇:PySpark大数据分析(5):数据分区
下一篇:PySpark大数据分析(7):Spark SQL

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值