spark 小技巧

6 篇文章 0 订阅

一、把结果带出foreach

val e= b.map(f⇒{
    	var dbConnector:GraphDatabaseConnector=new Neo4jConnector();
    	val eachList=dbConnector.getPersonSimList(f._1)
      dbConnector.finalize()
    	dbConnector=null
    	//直接返回就ok
      eachList
    })

二、scala中如果直接return,返回的是整个方法的返回值,而不是方法里的某个lambda表达式的返回值,所以不用写return,直接最后将结果单独作为一行返回就行
同时,如果要返回多个值的话,直接

//方法的头部是这样的
:(Long,Long)= 
//返回值这样
return (a,b)

三、没事不要多加括号

val points2 = Array(Array((9.0,3.9,4.7)), Array(( 7.0,2.0,2.9)), Array(( 5.6,5.0,6.9)), Array((6.3,2.0,9.9)))
val points2: Array[Array[(Double, Double, Double)]]
val points2 = Array(Array(9.0,3.9,4.7), Array(7.0,2.0,2.9), Array(5.6,5.0,6.9), Array(6.3,2.0,9.9))
val points2: Array[Array[Double]]

四、要将partition里的数据合并成一个

val rdd1MapParRDD = rdd1.mapPartitions(f ⇒ {
        var buf1 = scala.collection.mutable.ArrayBuffer.empty[Float]
        //    	 var resultMap = Map[String,Array[Float]]()
        //    	 var result = List[Array[Float]]()
        var result = scala.collection.mutable.ArrayBuffer.empty[Array[Float]]
        //        f.map(f⇒{
        while (f.hasNext) {
          buf1.appendAll(f.next()._2)
        }
        //        })
        val arr = buf1.toArray
        //        arr.iterator
        //        result.::(arr).iterator
        result.+=(arr).iterator
        //        arr.toIterator
      })

五、当查看lib的路径感觉有问题时,可以打印运行时的路径,然后把lib放在对应路径下

String classpathString=System.getProperty("java.class.path");
System.out.println("classpathString:"+classpathString);

六、使用log

@transient
  val logger:Logger=new ConsoleLogger()

log需要实现Serializable接口,但是在spark中没用,必须要加上@transient,同时,如果使用mapPartition这类的,由于log没有被分发,所以在work节点上是没有log这个类的,需要在mapPartition中new 一个log

七、conf优先级
优先级最高的是在用户代码中显式调用 set() 方法设置的选项。其次是通过 spark-submit 传递的参数,再次是写在配置文件中的值,最后是系统的默认值。

八、在 conf/spark-env.sh 中将环境变量 SPARK_LOCAL_DIRS 设置为用逗号隔开的存储位置
列表,来指定 Spark 用来混洗数据的本地存储路径。这需要在独立模式和 Mesos 模式下设
置。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值