在这篇文章中,我将讨论Apache Spark作为编程语言的核心API。我假设您具有Spark框架(元组,RDD,对RDD和数据框架)及其初始化步骤的基本知识。

当我们推出星火SHEL,L无论是在斯卡拉或Python(即星火Shell或PySpark),它将初始化  sparkContext 为  sc 和  SQLContext 作为  sqlContext

  • 核心API
  • sc.textFile(路径)
  • 此方法从HDFS读取文本文件并将其作为字符串的RDD返回。
ordersRDD = sc。textFile('orders')
  • rdd.first()
  • 此方法返回RDD中的第一个元素。
ordersRDD。第一个()
#u'1,2013-07-25 00:00:00.0,11599,CLOSED' - 订单的第一个元素RDD
  • rdd.collect()
  • 此方法返回包含RDD中所有元素的列表。
ordersRDD。收集()
#[u'68882,2014-07-22 00:00:00.0,10000,ON_HOLD',u'68883,2014-07-23 00:00:00.0,5533,COMPLETE']
  • rdd.filter(F)
  • 此方法返回一个仅包含满足谓词的元素的新RDD,即它将创建一个新的RDD,其中包含满足参数中给出的条件的元素。
filterdRDD = ordersRDD。过滤(拉姆达 线:线。分裂('')[ 3 ] 在 [ '完整的' ])
filterdRDD。第一个()
#u'3,2013-07-25 00:00:00.0,12111,完成'
  • rdd.map(F)
  • 此方法通过将函数应用于此RDD的每个元素来返回新的RDD。即它将通过应用函数将RDD转换为新的RDD。
mapedRDD = ordersRDD。地图(拉姆达 线:元组(线。分裂('' )))
mapedRDD。第一个()
#(u'1',u'2013-07-25 00:00:00.0',u'11599',u'CLOSED')
  • rdd.flatMap(F)
  • 此方法通过首先将函数应用于此RDD的每个元素(与map方法相同)然后展平结果来返回新的RDD。
flatMapedRDD = ordersRDD。flatMap(拉姆达 线:线。分裂('' ))
flatMapedRDD。拿(4)
#[u'1',u'2013-07-25 00:00:00.0',u'11599',u'CLOSED']
  • sc.parallelize(c)中
  • 此方法分发本地Python集合以形成RDD。
lRDD = sc。并行化(范围(1,10))
lRDD。第一个()
#1
lRDD。拿(10)
#[1,2,3,4,5,6,7,8,9]
  • rdd.reduce(F)
  • 此方法使用指定的可交换和关联二元运算符减少此RDD的元素。
lRDD。减少(lambda  x,y:x + y)
#45  - 这是1到9的总和
  • rdd.count()
  • 此方法返回此RDD中的元素数。
lRDD。count()
#9  - 因为lRDD中有9个元素
  • rdd.sortBy(keyFunc)
  • 此方法按给定方式对此RDD进行排序  keyfunc
lRDD。收集()
#[1,2,3,4,5,6,7,8,9]
lRDD。sortBy(lambda  x:- x)。收集()
#[9,8,7,6,5,4,3,2,1]  - 可以任何方式对rdd进行排序,即ASC或DESC
  • rdd.top(NUM)
  • 此方法从RDD获取前N个元素。它返回按降序排序的列表。
lRDD。顶部(3)
#[9,8,7]
  • rdd.take(NUM)
  • 此方法采用RDD的第一个num元素。
lRDD。拿(7)
#[1,2,3,4,5,6,7]
  • rdd.union(otherRDD)
  • 返回此RDD与另一个RDD的并集。
l1 = sc。并行化(范围(1,5))
l1。收集()
#[1,2,3,4]
l2 = sc。并行化(范围(3,8))
l2。收集()
#[3,4,5,6,7]
lUnion = l1。联盟(l2)
联盟。收集()
#[1,2,3,4,3,4,5,6,7]
  • rdd.distinct()
  • 返回包含此RDD中不同元素的新RDD。
lDistinct = lUnion。distinct()
lDistinct。收集()
#[2,4,6,1,3,5,7]
  • rdd.intersection(otherRDD)
  • 返回此RDD与另一个RDD的交集,即输出不包含任何重复元素,即使输入RDD也是如此。
lIntersection = l1。交叉路口(l2)
l交叉。收集()
#[4,3]
  • rdd.subtract(otherRDD)
  • 返回RDD中未包含在另一个值中的每个值。
lSubtract = l1。减去(l2)
lSubtract。收集()
#[2,1]
  • rdd.saveAsTextFile(path,compressionCodec)
  • 将此RDD保存为文本文件。
lRDD。saveAsTextFile('lRDD_only')
#此方法将lRDD保存在HDFS主目录下的lRDD_only文件夹下
联盟。saveAsTextFile('lRDD_union','org.apache.hadoop.io.compress.GzipCodec')
#此方法将使用Gzip编解码器压缩的lUion保存在HDFS主目录下的lRDD_union文件夹下
lSubtract。saveAsTextFile('lRDD_union','org.apache.hadoop.io.compress.SnappyCodec')
#此方法将使用Snappy编解码器压缩的lUion保存在HDFS主目录下的lRDD_union文件夹下
  • rdd.keyBy(F)
  • 通过应用函数创建此RDD中元素的元组(对RDD)。
ordersPairRDD = ordersRDD。keyBy(拉姆达 线:INT(线。分裂('')[ 0 ]))
ordersPairRDD。第一个()
#(1,u'1,2013-07-25 00:00:00.0,11599,CLOSED')
#这样我们就可以创建RDD对了。

目前,这些是普通RDD的所有功能或方法,即没有密钥。在我的下一篇文章中,我将解释有关RDD与多个示例片段的功能或方法。