最近开始做spark的期末作业了,记一下一些实验里反复用到的操作技巧,非常个人向,很多记录语言。
操作主要基于Linux的小黑框,没有采用脚本运行。
读入数据
本地数据读取
sc.textFile("file:///localhost/text.txt")
千万记得使用 file:// 在本地地址的前面,否则就会报错。
这样提取出来的数据已经是RDD了,每个算子是文件里的一行形成的字符串。
HDFS上的数据读取
sc.textFile("hdfs://192.168.88.128:9000/text.txt")
sc.textFile("hdfs://192.168.88.128:9000/file/*.txt") #读取该文件夹下的所有txt文件
同上,必须添加 hdfs:// 在地址前
输出数据到屏幕
单独取前几行数据
rdd.first() #输出第一行
rdd.take(rows) #输出前rows行
rdd.takeOrdered(rows) #输出前rows行且由小到大排序,倒序需加参数(key=lambda x: -x)
rows是需要显示的行数的值,这个值对于这两个方法都是必填的,如果输入的值大于数据的数量,数据会被全部输出。
显示全部数据
rdd.collect()
输出DataFrame
df.show(rows,Ture/False)
rows在这个方法中不是必要参数,如果不输入该参数,数据大于20时它仅输出20条,否则全部输出。
后面那个布尔值参数是控制是否要把每个元素的值统一宽度输出,默认值为Ture,在默认的情况下,如果某个值是字符串并长度较长,输出时会被省略后面的部分,变成“xxxxxxxx…”的状态。因此如果需要保证每个元素都全部显示,需要将这个值改成Flase。
需要注意的是,后面这个布尔值是不能单独使用的,使用它必须要先设rows。
RDD操作
list转RDD
sc.parallelize(list) #eg:list= ['a','b','c'] , 此时用take(3)可输出为['a','b','c']
该函数可以将各种数据转为RDD,遇到前一个数据被.countByKey().items()之后,可以用这个转回来方便继续操作。
转(key,value)格式
spark是类Hadoop MapReduce的通用的并行计算框架,需要理解MapReduce的操作过程才能理解spark的用法。
(待更新)