在星火就业斯卡拉成员字段知名度 [英] Scala member field visibility in Spark jobs

查看:199
本文介绍了在星火就业斯卡拉成员字段知名度的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有定义,像这样一类的Scala:

I have a Scala class that I define like so:

import org.apache.spark.{SparkConf, SparkContext}

object TestObject extends App{
  val FAMILY = "data".toUpperCase

  override def main(args: Array[String]) {
    val sc = new SparkContext(new SparkConf())

    sc.parallelize(1 to 10)
      .map(getData)
      .saveAsTextFile("my_output")
  }

  def getData(i: Int) = {
    ( i, FAMILY, "data".toUpperCase )
  }
}

我把它提交给纱线集群像这样:

I submit it to a YARN cluster like so:

HADOOP_CONF_DIR=/etc/hadoop/conf spark-submit \
    --conf spark.hadoop.validateOutputSpecs=false \
    --conf spark.yarn.jar=hdfs:/apps/local/spark-assembly-1.2.1-hadoop2.4.0.jar \
    --deploy-mode=cluster \
    --master=yarn \
    --class=TestObject \
    target/scala-2.11/myjar-assembly-1.1.jar

没想到,输出看起来像下面,说明的getData 方法不能看到家庭:

(1,null,DATA)
(2,null,DATA)
(3,null,DATA)
(4,null,DATA)
(5,null,DATA)
(6,null,DATA)
(7,null,DATA)
(8,null,DATA)
(9,null,DATA)
(10,null,DATA)

我需要做什么了解,有关领域和范围,并知名度和火花提交和对象和单身和诸如此类的东西,了解为什么发生这种情况?而我应该怎么做,而不是,如果我基本上要定义为常量的的getData 方法可见的变量?

推荐答案

我可能会丢失一些东西,但我不认为你应该定义一个方法。当你扩展应用你继承一个 ,你不应该覆盖它,因为这是实际调用你的<$的code C $ C>应用

I might be missing something, but I don't think you should be defining a main method. When you extend App, you inherit a main, and you should not override it since that is what actually invokes the code in your App.

例如,在你的答案简单的类应该写成

For example, the simple class in your answer should be written

object TestObject extends App {
  val FAMILY = "data"
  println(FAMILY, "data")
}

这篇关于在星火就业斯卡拉成员字段知名度的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆