热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

sparkdemo之wordcount和K-means

由于Scala的学习成本有些高,所以,以下的demo都是基于python的。如果想了解spark架构,可以移步到博客点击打开链接Wordcount介绍作为类似于hello

由于Scala的学习成本有些高,所以,以下的demo都是基于python的。如果想了解spark架构,可以移步到博客点击打开链接

Wordcount介绍

作为类似于hello word一样经典的入门代码,wordcount主要是完成词频统计的,在spark框架中,它仍然是map和reduce两个步骤,但是代码的很简洁。

代码如下:

#!bin/lib/python
 
import sys
from operator import add
 
from pyspark import SparkContext
 
import sys
reload(sys)
sys.setdefaultencoding("utf-8")
 
if __name__ == "__main__":
    //定义上下文环境
    sc = SparkContext(appName="PythonWordCount")
    //从输入读取数据
    lines = sc.textFile("hdfs://yz-cpu-vm001.hogpu.cc:8020/user/yichen.gong/data/mnli_data/glove.840B.300d.txt",1)
    //数据处理,划分,map,reduce
    counts = lines.flatMap(lambda x: x.split(' ')) \
                  .map(lambda x: (x,1)) \
                  .reduceByKey(add)
    output = counts.collect()
    //结果写回hdfs
    counts.saveAsTextFile("hdfs://yz-cpu-vm001.hogpu.cc:8020/user/laipeng.han/output")
    for (word,count) in output:
        print "%s: %i" %(word,count)
    sc.stop()

其提交指令为:

export HADOOP_CONF_DIR=/usr/hdp/2.5.0.0-1245/hadoop/conf

spark-submit \

  --master yarn \

  --deploy-mode cluster \

  --queue debugqueue \

   /home/users/laipeng.han/wordcount.py

以下是必要的参数,参数说明:

master:The master URL for the cluster,由于我用到架构的调度器为yarn,所以这里我们只能写yarn。

deploy-mode :Whether to deploy your driver on the worker nodes (cluster) or locally as an external client (client) (default: client) ,有两个参数,master 和 client,Driver运行的地方,如果选择client,其日志会打印在终端界面。要注意的是,如果设置这个参数,那么需要同时指定上面 master 为 yarn。

queue:提交的任务队列

K-means介绍

很经典的基于距离的聚类算法,首先,我们需要先预测类簇的个数,也就是K的值,然后基于这K个中心点,将所有的点根据距离的远近进行划分,然后对每一个类簇重新计算其质心,然后重新聚类,迭代此过程直到聚类完成。由于它是一个不停的迭代的过程,所以当数据量大的时候还是很适合Spark来处理的。

代码如下:

#!/bin/lib/python
 
from __future__ import print_function
 
from numpy import array
from math import sqrt
 
from pyspark import SparkContext
from pyspark.mllib.clustering import KMeans, KMeansModel
 
 
if __name__ == "__main__":
    sc = SparkContext(appName="FaceKMeansTest")  # SparkContext
 
    # Load and parse the data
    data = sc.textFile("hdfs://yz-cpu-vm001.hogpu.cc:8020/user/zhizhong.su/face_fea/feas.txt")
    parsedData = data.map(lambda line: array([float(x) for x in line.split(' ')]))
    #print data
 
    # Build the model (cluster the data)
    clusters = KMeans.train(parsedData, 2000, maxIteratiOns=10, initializatiOnMode="random")
 
    # Evaluate clustering by computing Within Set Sum of Squared Errors
    def error(point):
        center = clusters.centers[clusters.predict(point)]
        return sqrt(sum([x**2 for x in (point - center)]))
 
 
    WSSSE = parsedData.map(lambda point: error(point)).reduce(lambda x, y: x + y)
    print("Within Set Sum of Squared Error = " + str(WSSSE))
 
    # Save and load model
    #clusters.save(sc, "target/org/apache/spark/PythonKMeansExample/KMeansModel")
    #sameModel = KMeansModel.load(sc, "target/org/apache/spark/PythonKMeansExample/KMeansModel")
    # $example off$
 
    sc.stop()

提交任务的指令同上。

 

注:kill job的指令为:yarn application –kill applicationID




推荐阅读
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • 本文介绍了如何使用vue-awesome-swiper组件,包括在main.js中引入和使用swiper和swiperSlide组件,以及设置options和ref属性。同时还介绍了如何在模板中使用swiper和swiperSlide组件,并展示了如何通过循环渲染swipes数组中的数据,并使用picUrl属性显示图片。最后还介绍了如何添加分页器。 ... [详细]
  • 《树莓派开发实战(第2版)》——2.2 创建模型和运行推理:重回Hello World
    本节书摘来异步社区《概率编程实战》一书中的第2章,第2.2节,作者:【美】AviPfeffer(艾维费弗)&# ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 本文介绍了一个Java猜拳小游戏的代码,通过使用Scanner类获取用户输入的拳的数字,并随机生成计算机的拳,然后判断胜负。该游戏可以选择剪刀、石头、布三种拳,通过比较两者的拳来决定胜负。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文介绍了在Win10上安装WinPythonHadoop的详细步骤,包括安装Python环境、安装JDK8、安装pyspark、安装Hadoop和Spark、设置环境变量、下载winutils.exe等。同时提醒注意Hadoop版本与pyspark版本的一致性,并建议重启电脑以确保安装成功。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 展开全部下面的代码是创建一个立方体Thisexamplescreatesanddisplaysasimplebox.#Thefirstlineloadstheinit_disp ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • 本文介绍了如何使用elementui分页组件进行分页功能的改写,只需一行代码即可调用。通过封装分页组件,避免在每个页面都写跳转请求的重复代码。详细的代码示例和使用方法在正文中给出。 ... [详细]
  • 大数据Hadoop生态(20)MapReduce框架原理OutputFormat的开发笔记
    本文介绍了大数据Hadoop生态(20)MapReduce框架原理OutputFormat的开发笔记,包括outputFormat接口实现类、自定义outputFormat步骤和案例。案例中将包含nty的日志输出到nty.log文件,其他日志输出到other.log文件。同时提供了一些相关网址供参考。 ... [详细]
  • Vue3中setup函数的参数props和context配置详解
    本文详细介绍了Vue3中setup函数的参数props和context的配置方法,包括props的接收和配置声明,以及未通过props进行接收配置时的输出值。同时还介绍了父组件传递给子组件的值和模板的相关内容。阅读本文后,读者将对Vue3中setup函数的参数props和context的配置有更深入的理解。 ... [详细]
  • 本文讨论了将HashRouter改为Router后,页面全部变为空白页且没有报错的问题。作者提到了在实际部署中需要在服务端进行配置以避免刷新404的问题,并分享了route/index.js中hash模式的配置。文章还提到了在vueJs项目中遇到过类似的问题。 ... [详细]
  • 一、路由首先需要配置路由,就是点击good组件进入goodDetail组件配置路由如下{path:goodDetail,component:goodDetail}同时在good组件中写入如下点击事件,路由中加入 ... [详细]
author-avatar
土豆小妈姐_645
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有