Spark (Python版) 学习笔记(一)

import sys
from operator import add

from pyspark import SparkContext

if __name__ == "__main__":
    #打开README.md文件
    sc = SparkContext(appName="PythonWordCount")
    textFile = sc.textFile('README.md')


    #1.基本RDD操作
    #actions: 在数据集上运行计算后返回值
    print textFile.count()   # 计数,返回RDD中items的个数,这里就是README.md的总行
    print textFile.first()  # RDD中的第一个item,这里就是文件README.md的第一行

    #transformations: 转换, 从现有数据集创建一个新的数据集
    textFileWithSpark = textFile.filter(lambda line: "spark" in line)#使用filter这一转换返回一个新的RDD,这些RDD中的items都含有“Spark”字符串。
    print textFileWithSpark.count()


    #2.更多的RDD操作
    print textFile.map(lambda line: len(line.split())).reduce(lambda a, b: a if (a>b) else b) #我们希望找到含有最后单词的一句话:
    '''
    这个语句中,map函数将len(line.split())这一语句在所有line上执行,返回每个line所含有的单词个数,也就是将line都map到一个整数值,
    然后创建一个新的RDD。然后调用reduce,找到最大值。map和reduce函数里的参数是python中的匿名函数(lambda),事实上,我们这里也可以传递python中
    更顶层的函数。比如,我们先定义一个比较大小的函数,这样我们的代码会更容易理解:
    '''
    def max(a, b):
        if a > b:
            return a
        else:
            return b
    print textFile.map(lambda line: len(line.split())).reduce(max)

    #Hadoop掀起了MapReduce的热潮。在spark中,能够更加容易的实现MapReduce
    wordCounts = textFile.flatMap(lambda line: line.split()).map(lambda word: (word, 1)).reduceByKey(lambda a, b: a+b)
    '''
    上述语句中,利用flatMap, map和reduceByKey三个转换,计算文件README.md中每个单词出现的个数,并返回一个新的RDD,
    每个item的格式为(string, int),即单词和对应的出现次数。其中,flatMap(func):与map相似,但是每个输入的item能
    够被map到0个或者更多的输出items上,也就是说func的返回值应当是一个Seq,而不是一个单独的item,上述语句中,匿名函数
    返回的就是一句话中所含的每个单词reduceByKey(func):可以作用于使用“键-值”(K, V)形式存储的数据集上并
    返回一组新的数据集(K, V),其中,每个键的值为聚合使用func操作的结果,这里相当于python中字典的含义。上述语句中
    ,相当于当某个单词出现一次时,就在这个单词的出现次数上加1,每个单词就是一个Key,reducByKey中的匿名函数计算单词的出现次数。
    '''
    print wordCounts.collect()#要收集上述语句的计算结果,可以使用collect这一动作:

    #3. 缓存Caching
    print textFileWithSpark.cache()
    print textFileWithSpark.count()

    #4. 自含式应用程序(self-contained applications)
    sc.stop()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值