Spark与大数据处理常用操作

  • 1
    Spark可以分为1个driver(笔记本电脑或者集群网关机器上)和若干个executor(在各个节点上),通过SparkContext(简称sc)连接Spark集群、创建RDD,简单可以认为SparkContext是Spark程序的根本。
    Driver会把计算任务分成一系列小的task,然后送到executor执行。executor之间可以通信,在每个executor完成自己的task以后,所有的信息会被传回。
  • 2RDD
    在Spark里,所有的处理和计算任务都会被组织成一系列RDD(弹性分布式数据集,简称RDD)上的transformations(转换) 和 actions(动作)。
    RDD是一个包含诸多元素、被划分到不同节点上进行并行处理的数据集合,可以将RDD持久化到内存中,这样就可以有效地在并行操作中复用(在机器学习这种需要反复迭代的任务中非常有效)。
    在节点发生错误时RDD也可以自动恢复。说起来,RDD就像一个NumPy array或者一个Pandas Series,可以视作一个有序的item集合。
    只不过这些item并不存在driver端的内存里,而是被分割成很多个partitions,每个partition的数据存在集群的executor的内存中。

初始化RDD

  • 使用sc.parallelize
    这里写图片描述
  • 直接读取文本到RDD
    每一行都被当成一个item,但是:Spark一般默认你的路径是指向HDFS的,如果你要从本地读取文件的话,给一个file://开头的全局路径。
rdd = sc.textFile("file://" + "yourfilename")
  • 读取整个文件夹下的所有文件
    此时RDD的每一个item实际上是形如(文件名,文件内容)的元组
rdd = sc.textFile("file://" + "文件夹的name")

RDD的transform

  • map()对RDD中的每一个item都执行某个操作,类似for循环~~进去一个返回一个~~
  • flatmap()对RDD中的每一个item都执行某个操作,类似for循环~~进去一个返回多个~~给展开了
  • filter()过滤,选择出符合条件的
  • distinct()去重
  • sample()取样
numbersRDD = sc.parallelize(range(1,10+1))
print(numbersRDD.collect())

squaresRDD = numbersRDD.map(lambda x: x**2)  # Square every number
print(squaresRDD.collect())

filteredRDD = numbersRDD.filter(lambda x: x % 2 == 0)  # Only the evens
print(filteredRDD.collect())
def doubleIfOdd(x):
    if x % 2 == 1:
        return 2 * x
    else:
        return x

resultRDD = (numbersRDD           # In parentheses so we can write each
             .map(doubleIfOdd)    # transformation in one line
             .filter(lambda x: x > 6)
             .distinct())

resultRDD.collect()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值