经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » Spark » 查看文章
Spark初步 从wordcount开始
来源:cnblogs  作者:MyStitch  时间:2019/4/1 9:00:55  对本文有异议

Spark初步-从wordcount开始

spark中自带的example,有一个wordcount例子,我们逐步分析wordcount代码,开始我们的spark之旅。

准备工作

把README.md文件复制到当前的文件目录,启动jupyter,编写我们的代码。

README.md文件在Spark的根目录下。

  1. from pyspark.sql import SparkSession
  2. from operator import add
  1. # 初始化spark实例,并把应用命名为wordcount
  2. spark = SparkSession.builder.appName("WordCount").getOrCreate()
  1. # 从文件读取内容
  2. # 此时data为dataframe格式,每一行为文件中的一行
  3. data = spark.read.text("README.md")
  1. # 查看第一行数据
  2. f = data.first()
  3. f
  1. Row(value='# Apache Spark')
  1. # 查看前5行数据
  2. data.take(5)
  1. [Row(value='# Apache Spark'),
  2. Row(value=''),
  3. Row(value='Spark is a fast and general cluster computing system for Big Data. It provides'),
  4. Row(value='high-level APIs in Scala, Java, Python, and R, and an optimized engine that'),
  5. Row(value='supports general computation graphs for data analysis. It also supports a')]
  1. # 把数据转换为rdd格式,并取出值
  2. data2 = data.rdd.map(lambda x: x[0])
  3. # 查看第一行数据,可以看到数据为string格式
  4. data2.first()
  1. '# Apache Spark'
  1. # 对于每行按照空格来分割,并把结果拉平
  2. data3 = data2.flatMap(lambda x: x.split(' '))
  3. # 查看前5个数据,可以看到已经分割为单个词了
  4. data3.take(5)
  1. ['#', 'Apache', 'Spark', '', 'Spark']
  1. # 为每个单词标记次数1
  2. data4 = data3.map(lambda x: (x,1))
  3. # 结果为turple类型,前面是key,后面的数字为单词的次数
  4. data4.take(5)
  1. [('#', 1), ('Apache', 1), ('Spark', 1), ('', 1), ('Spark', 1)]
  1. # 汇总统计每个单词出现的次数
  2. data5 = data4.reduceByKey(add)
  3. # 结果为turple类型,数字为单词的出现次数
  4. data5.take(10)
  1. [('#', 1),
  2. ('Apache', 1),
  3. ('Spark', 16),
  4. ('', 71),
  5. ('is', 6),
  6. ('a', 8),
  7. ('fast', 1),
  8. ('and', 9),
  9. ('general', 3),
  10. ('cluster', 2)]
  1. # 按照出现次数多少来排序
  2. res = data5.sortBy(lambda x: x[1], ascending=False).collect()
  3. res[:5]
  1. [('', 71), ('the', 24), ('to', 17), ('Spark', 16), ('for', 12)]

完整代码

  1. from pyspark.sql import SparkSession
  2. from operator import add
  3. spark = SparkSession.builder.appName("WordCount").getOrCreate()
  4. data = spark.read.text("README.md")
  5. data1 = data.rdd.map(lambda x: x[0])
  6. data2 = data1.flatMap(lambda x: x.split(' ')).map(lambda x: (x, 1)).reduceByKey(add)
  7. res = data2.sortBy(lambda x: x[1], ascending=False).collect()
  8. print(res[:10])
  1. [('', 71), ('the', 24), ('to', 17), ('Spark', 16), ('for', 12), ('and', 9), ('##', 9), ('a', 8), ('can', 7), ('on', 7)]

原文链接:http://www.cnblogs.com/StitchSun/p/10535822.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号