zoukankan      html  css  js  c++  java
  • spark windows环境下spark安装和运行(2)

    二,开发篇
    下面介绍本地spark开发的示例,虽然spark是处理大数据的,常常在大型计算机集群上运行,但本地spark方便调试,可以帮助我们学习相关的语法。maven构建工具的开发流程可以参看:https://blog.csdn.net/u012373815/article/details/53266301

    打开idea, file=>new=>project=>选择scala工程,选择IDEA=>输入工程名(如test),路径,JDK选刚刚安装的1.8,scala SDK选刚刚安装的scala-sdk-2.11.8(或者点右边的create,选择你想要的版本下载)=>finish



    再src上右键=>new=>scala class=>选下拉框scala object,输入类名。

    输入测试代码,这是一段分组排序的代码:

    import org.apache.spark.{SparkContext,SparkConf}
    object Sort {
      def main(args: Array[String]): Unit = {
        val conf = new SparkConf().setAppName("GroupSort")
        val sc = new SparkContext(conf)
        val test =List(("key1","123",12,2,0.13),("key1","123",12,3,0.18),("key2","234",12,1,0.09),("key1","345",12,8,0.75),("key2","456",12,5,0.45))
        val rdd = sc.parallelize(test)
     
        val rdd1= rdd.map(l => (l._1, (l._2, l._3, l._4, l._5))).groupByKey()
          .flatMap(line => {
            val topItem = line._2.toArray.sortBy(_._4)(Ordering[Double].reverse)
              topItem.map(f=>(line._1,f._1,f._4)).toList
          })
        rdd1.foreach(println)
     
        sc.stop()
      }
    }
    设置本地模式:run=>edit configrations=>Application=>选择我们应用,VM options上添加-Dspark.master=local -Dspark.app.name=test

    包含spark和scala sdk: 工程目录右键=>open module settings=> project settings=> libraries=>"+"=>java=>选择spark安装目录下的jars文件夹=>确认。同样地,“+”=>scala sdk =>选择需要的scala sdk(与spark版本对应的sdk)=>确认。

    运行代码:


    三,问题集锦:
    1, import org.apache.spark.SparkContext引入了包,但下面代码connot resolve symbol SparkContext.(IDEA环境下,maven工程)

    问题检查:工程目录右键->open module setting->project setting->libraries,发现左侧没有包含任何依赖库。

    解决方法:如果是maven工程,则工程目录右键->maven->reimport。这个时候会自动下载相关依赖。相关依赖在.m2的repository文件夹下。如果是普通scala工程,按前面“开发篇”介绍的:工程目录右键=>open module settings=> project settings=> libraries=>"+"=>java=>选择spark安装目录下的jars文件夹=>确认。同样地,“+”=>scala sdk =>选择需要的scala sdk(与spark版本对应的sdk)=>确认。

    思考:maven真的很强大,比如安装了scala插件后,不许要安装scala JDK,直接利用maven pom.xml配置好scala的版本,自动下载相应的scala的包。这样做有利于大型工程协助,同一个pom.xml文件可以保证大家都在同样的依赖库环境下开发。

     

    2, 全局变量要谨慎,尤其是Buffer类型,因为你不知道它可能被塞进多少东西,除非你真的需要。

    例如:

    val data_set: RDD[(String, String, Int, Int)] = raw_rdd.map(generate_instance_per_line(_, configure))

    其中generate_instance_per_line函数里对一个globalListBuffer全局变量进行了append操作,那么每一个map都会执行一次append.



    3, SparkException: An application name must be set in your configuration

    解决方法:

    进入:Run > Edit Configurations... > Application > "My project name" > Configuraton,

    设置VM options项为-Dspark.master=local.

    -Dspark.master=local:表示设置我的spark程序以local模式运行

     

    4,java.lang.NoClassDefFoundError: org/apache/spark/SparkContext

    import  org.apache.spark.SparkConf没有报错,但运行时报上面NoClassDefFoundError错误。

    解决办法:maven工程build的包有provided和compile两种模式,provided用于:运行环境已经有了相应的包,所以没有必要在build时把相关的包打包进来,减少jar包的体积。本地运行时,需要把provide改成complie。或者IDEA提供了更方便的做法:



  • 相关阅读:
    正则化方法:L1和L2 regularization、数据集扩增、dropout
    xgboost原理及应用
    机器学习系列------1. GBDT算法的原理
    c++ stl容器set成员函数介绍及set集合插入,遍历等用法举例
    STL中的set容器的一点总结
    2016-12-17 新浪博客服务器挂掉了,所有博客页面都无法打开
    Centos 6.5 下php5.6.2 的编译安装
    Docker的基本组成
    Docker简介
    基于Dubbo框架构建分布式服务(集群容错&负载均衡)
  • 原文地址:https://www.cnblogs.com/leolzi/p/12726267.html
Copyright © 2011-2022 走看看