1.persist 与 cache 区别
persist源码内部调用了
persist(self, storageLevel=StorageLevel.MEMORY_ONLY),可以设置persist的级别;
cache() 内部调用了persist,设置persis水平为MEMORY_ONLY
def cache(self):
"""
Persist this RDD with the default storage level (C{MEMORY_ONLY}).
"""
self.is_cached = True
self.persist(StorageLevel.MEMORY_ONLY)
return self
2.输出压缩格式方法
df.saveAsTextFile(savepath, compressionCodecClass="org.apache.hadoop.io.compress.GzipCodec")
3.sc.wholeTextFiles 与 sc.textFile
sc.textFiles(path) 能将path 里的所有文件内容读出,以文件中的每一行作为一条记录的方式;
sc.wholeTextFiles 返回的是[(key, val), (key, val)...]的形式,其中key是文件路径,val是文件内容,这里我们要注意的重点是:每个文件作为一个记录!这说明这里的 val 将不再是 list 的方式为你将文件每行拆成一个 list的元素, 而是将整个文本的内容以字符串的形式读进来,也就是说val = '...line1...\n...line2...\n' 这时需要你自己去拆分每行.
4.aggregateByKey用法
aggregateByKey(zeroValue,seqFunc,combFunc,numPartitions=None, partitionFunc=)
用于对key进行聚合的转化操作。
参数:
zeroValue: 初始化参数,一般设置为不影响后面函数的计算,例如如果是累加就初始化为0,如果是list累加,就初始化为[]等等。
seqFunc: 元素操作
combFunc:聚合操作
numPartitions: 分区数量
例:
x = sc.parallelize([('B',1),('B',2),('A',3),('A',4),('A',5)])
zeroValue = [] #初始元素
mergeVal = (lambda aggregated, el: aggregated + [(el,el**2)])
mergeComb = (lambda agg1,agg2: agg1 + agg2 )
y = x.aggregateByKey(zeroValue,mergeVal,mergeComb)
y.collect()
Out[59]: [('B', [(1,