3

Scala でhiveContextin関数を作成しました。このパラメーターを他の関数に渡す必要があります。これが構造です。main()hiveContext

object Project {
    def main(name: String): Int = {
      val hiveContext = new org.apache.spark.sql.hive.HiveContext(sc)
      ... 
    } 
    def read (streamId: Int, hc:hiveContext): Array[Byte] = {
    ... 
    } 
    def close (): Unit = {
    ...
    }
 }

しかし、うまくいきません。関数read()は内部で呼び出されmain()ます。

何か案が?

4

2 に答える 2

2

私は hiveContext を暗黙的として宣言しています。これは私にとってはうまくいっています

implicit val sqlContext: HiveContext = new HiveContext(sc)
MyJob.run(conf)

MyJob で定義:

override def run(config: Config)(implicit sqlContext: SQLContext): Unit = ...

ただし、暗黙的にしたくない場合は、これと同じにする必要があります

val sqlContext: HiveContext = new HiveContext(sc)
MyJob.run(conf)(sqlContext)

override def run(config: Config)(sqlContext: SQLContext): Unit = ...

また、関数 read は、hiveContext ではなく、パラメーター hc の型として HiveContext を受け取る必要があります。

def read (streamId: Int, hc:HiveContext): Array[Byte] = 
于 2016-06-01T10:36:57.770 に答える