3.1 RDD基础

在 Python 中使用 textFile() 创建一个字符串的 RDD

>>> lines = sc.textFile('pyspark')

RDD 操作

RDD 支持两种类型的操作:

转化操作和行动操作的区别在于 Spark 计算 RDD 的方式不同。
虽然你可以在任何时候定义新的 RDD,但 Spark 只会惰性计算这些 RDD。
它们只有第一次在一个行动操作中用到时,才会真正计算。

RDD 持久化到内存中

默认情况下,Spark 的 RDD 会在你每次对它们进行行动操作时重新计算。
如果想在多个行动操作中重用同一个 RDD,可以使用 RDD.persist() 让 Spark 把这个 RDD 缓存下来。

>>> pythonLines.persist
<bound method PipelinedRDD.persist of PythonRDD[4] at RDD at PythonRDD.scala:49>
>>> pythonLines.first()
u'# to use IPython and set PYSPARK_DRIVER_PYTHON_OPTS to pass options when starting the Python driver'
>>> pythonLines.count()
6

总结

总的来说,每个 Spark 程序或 shell 会话都按如下方式工作。

  1. 从外部数据创建出输入 RDD。
  2. 使用诸如 filter() 这样的转化操作对 RDD 进行转化,以定义新的 RDD。
  3. 告诉 Spark 对需要被重用的中间结果 RDD 执行 persist() 操作。
  4. 使用行动操作(例如 count() 和 first() 等)来触发一次并行计算,Spark 会对计算进行优化后再执行。