pysaprk_统计词频

pysaprk_统计词频

Python 中使用行动操作对错误进行计数 并打印出来

#方法2需要复制这三行
import findspark
findspark.init()
import pyspark 
import sys
from pyspark import SparkConf, SparkContext
if __name__ == "__main__":
#     master = "local"
    if len(sys.argv) == 2:
        master = sys.argv[1]
#         在 Python 中初始化 Spark
    conf = SparkConf().setMaster("local").setAppName("My App")
    sc = SparkContext(conf = conf)
#     sc = SparkContext(master, "WordCount")
# 创建 RDD 
# 最简单的方式就是把程序中一个已有的集合传给 SparkContext 的 parallelize()
# 方法,如例 3-5 至例 3-7 所示。这种方式在学习 Spark 时非常有用,它让你可以在 shell 中
# 快速创建出自己的 RDD,然后对这些 RDD 进行操作。不过,需要注意的是,除了开发原
# 型和测试时,这种方式用得并不多,毕竟这种方式需要把你的整个数据集先放在一台机器
# 的内存中

# 通过sc.parallelize可以把Python list,NumPy array或者Pandas Series,Pandas DataFrame转成Spark的RDD数据。
    lines = sc.parallelize(["pandas", "i like pandas"])
#     可以看到输出结果,flatMap是先映射后扁平化。
# countByValue的作用 统计一个RDD中各个value的出现次数。返回一个map,map的key是元素的值,value是出现的次数。
    result = lines.flatMap(lambda x: x.split(" ")).countByValue()
#     for key, value in result.iteritems():
    for key, value in result.items():
        print ( "%s %i :",key, value)


Python 中使用行动操作对错误进行计数 并打印出来

#方法2需要复制这三行
import findspark
findspark.init()
import pyspark 
import sys
from pyspark import SparkContext


# RDD 支持两种操作:转化操作和行动操作。RDD 的转化操作是返回一
# 个新的 RDD 的操作,比如 map() 和 filter(),而行动操作则是向驱动器程序返回结果或
# 把结果写入外部系统的操作,会触发实际的计算,比如 count() 和 first()。Spark 对待
# 转化操作和行动操作的方式很不一样

# 创建一个名为lines的RDD
inputRDD = sc.textFile("C:/data/readme.txt")
# C:/data/readme.txt
errorsRDD = inputRDD.filter(lambda x: "error" in x)

# 用 Python 进行 union() 转化操作
errorsRDD = inputRDD.filter(lambda x: "error" in x)
warningsRDD = inputRDD.filter(lambda x: "warning" in x)
badLinesRDD = errorsRDD.union(warningsRDD)
# ——————————————————————————————————以上为转化操作——————————————————————————————————————————————

# 我们已经看到了如何通过转化操作从已有的 RDD 创建出新的 RDD,不过有时,我们希望
# 对数据集进行实际的计算。行动操作是第二种类型的 RDD 操作,它们会把最终求得的结
# 果返回到驱动器程序,或者写入外部存储系统中。由于行动操作需要生成实际的输出,它
# 们会强制执行那些求值必须用到的 RDD 的转化操作。


# sc.stop
# name()返回rdd的名称

# min()返回rdd中的最小值

# sum()叠加rdd中所有元素

# take(n)取rdd中前n个元素

# count()返回rdd的元素个数
# 打印所有的行
badLinesRDD.collect()
# badLinesRDD.take(2)
# badLinesRDD.count() 

# #  Python 中使用行动操作对错误进行计数  并打印出来
print ("Input had  : " +  str(badLinesRDD.count())  + "concerning lines") 
# print "Here are 10 examples:"
for line in badLinesRDD.take(10):
 print (line)


# collect() 不能用在大规模数据集上 


# 在这个例子中,我们在驱动器程序中使用 take() 获取了 RDD 中的少量元素。然后在本地
# 遍历这些元素,并在驱动器端打印出来。RDD 还有一个 collect() 函数,可以用来获取整
# 个 RDD 中的数据。如果你的程序把 RDD 筛选到一个很小的规模,并且你想在本地处理
# 这些数据时,就可以使用它。记住,只有当你的整个数据集能在单台机器的内存中放得下
# 时,才能使用 collect(),因此,collect() 不能用在大规模数据集上。



# 在大多数情况下,RDD 不能通过 collect() 收集到驱动器进程中,因为它们一般都很大。
# 此时,我们通常要把数据写到诸如 HDFS 或 Amazon S3 这样的分布式的存储系统中。你可
# 以使用 saveAsTextFile()、saveAsSequenceFile(),或者任意的其他行动操作来把 RDD 的
# 数据内容以各种自带的格式保存起来。我们会在第 5 章讲解导出数据的各种选项。
# 需要注意的是,每当我们调用一个新的行动操作时,整个 RDD 都会从头开始计算。要避
# 免这种低效的行为,用户可以将中间结果持久化,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值