spark一些总结

spark

  • Spark 对待 转化操作和行动操作的方式很不一样,因此理解你正在进行的操作的类型是很重要的。如 果对于一个特定的函数是属于转化操作还是行动操作感到困惑,你可以看看它的返回值类 型:转化操作返回的是 RDD,而行动操作返回的是其他的数据类型。
  • 转化出来的 RDD 是惰性 求值的,只有在行动操作中用到这些 RDD 时才会被计算
  • RDD 还有一个 collect() 函数,可以用来获取整 个 RDD 中的数据。如果你的程序把 RDD 筛选到一个很小的规模,并且你想在本地处理 这些数据时,就可以使用它。记住,只有当你的整个数据集能在单台机器的内存中放得下 时,才能使用 collect(),因此,collect() 不能用在大规模数据集上。
  • 如果在 Scala 中出现了 NotSerializableException,通常问题就在于我们传递了一个不可序列 化的类中的函数或字段。记住,传递局部可序列化变量或顶级对象中的函数始终是安全的。
  • map() 的返回值类型不需要和输 入类型一样。这样如果有一个字符串 RDD,并且我们的 map() 函数是用来把字符串解析 并返回一个 Double 值的,那么此时我们的输入 RDD 类型就是 RDD[String],而输出类型 是 RDD[Double]。
  • fold() 和 reduce() 类似,接收一个与 reduce() 接收的函数签名相同的函数,再加上一个 “初始值”来作为每个分区第一次调用时的结果。你所提供的初始值应当是你提供的操作 的单位元素;也就是说,使用你的函数对这个初始值进行多次计算不会改变结果(**例如 +
    对应的 0,* 对应的 1,或拼接操作对应的空列表)。**
  • fold() 和 reduce() 都要求函数的返回值类型需要和我们所操作的 RDD 中的元素类型相 同
  • 注意,我们在第一次对这个 RDD 调用行动操作前就调用了 persist() 方法。persist() 调 用本身不会触发强制求值。
    如果要缓存的数据太多,内存中放不下,Spark 会自动利用最近最少使用(LRU)的缓存 策略把最老的分区从内存中移除。对于仅把数据存放在内存中的缓存级别,下一次要用到 已经被移除的分区时,这些分区就需要重新计算。但是对于使用内存与磁盘的缓存级别的 分区来说,被移除的分区都会写入磁盘。不论哪一种情况,都不必担心你的作业因为缓存 了太多数据而被打断。不过,缓存不必要的数据会导致有用的数据被移出内存,带来更多 重算的时间开销。
    最后,RDD 还有一个方法叫作 unpersist(),调用该方法可以手动把持久化的 RDD 从缓 存中移除。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值