在这篇文章中,我将讨论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与多个示例片段的功能或方法。