文章目录
分类
- 文件格式与文件系统:本地文件和分布式文件系统(NFS,HDFS等)
- spark SQL中的结构化数据:json和apache hive在内的结构化数据源
- 数据库与键值存储
文件格式
文本文件
input = sc.textFile(path) # 读取
input.saveAsTextFile(outputpath) # 存储
JSON
import json
data = input.map(lambda x: json.loads(x))
data.saveAsTextFile(outputpath)
逗号分隔值与制表符分隔值
csv
import csv
import StringIO
def loadRecord(line):
'解析一条CSV记录'
input = StringIO.StringIO(line)
reader = csv.DictReader(input, fieldnames = ['name','num'])
return reader.next()
input = sc.textFile(inputFile).map(loadRecord)
SequenceFile
data = sc.sequenceFile(inFile,"org.apache.hadoop.io.Text","org.apache.hadoop.io.IntWritable")
对象文件
python无法使用
Hadoop输入输出格式
使用newAPIHadoopRDD()方法
Spark SQL
Apache Hive
from pyspark.sql import HiveContext
hiveCtx = HiveContext(sc)
rows = hiveCtx.sql("SELECT name,age FROM users")
firstRow = rows.first()
print(firstRow.name)
JSON
tweets = hiveCtx.jsonFile("a.json")
tweets.registerTempTable("tweets")
result = hiveCtx.sql("SELECT user.name, text FROM tweets")
数据库
java数据库
df = spark.read.format('jdbc').options(
url='jdbc:mysql://127.0.0.1',
dbtable='mysql.db',
user='root',
password='123456'
).load()
df.show()
hbase
host = 'localhost'
table = 'student'
conf = {"hbase.zookeeper.quorum": host, "hbase.mapreduce.inputtable": table}
keyConv = "org.apache.spark.examples.pythonconverters.ImmutableBytesWritableToStringConverter"
valueConv = "org.apache.spark.examples.pythonconverters.HBaseResultToStringConverter"
hbase_rdd = sc.newAPIHadoopRDD("org.apache.hadoop.hbase.mapreduce.TableInputFormat","org.apache.hadoop.hbase.io.ImmutableBytesWritable","org.apache.hadoop.hbase.client.Result",keyConverter=keyConv,valueConverter=valueConv,conf=conf)