2016-10-20 1 views
0

すでに2日間問題があり、解決策が見つかりません。ClassNotFoundException:Spark内でZeppelin入力値を使用している場合のorg.apache.zeppelin.spark.ZeppelinContext DataFrameのフィルタメソッド

火花データフレームのフィルタメソッド内の入力値を使用しているとき、私は

ClassNotFoundException: org.apache.zeppelin.spark.ZeppelinContext 

を取得しています。

val city = z.select("City",cities).toString 
oDF.select("city").filter(r => city.equals(r.getAs[String]("city"))).count() 

私も

new String(bytes[]) 

で別のvalへの入力値をコピーしようとしたが、それでも同じエラーを取得します。

私は文字列リテラルとして宣言し、シームレスであれば代わりにz.select から値を取得するのと同じコードワーク

city: String = "NY" org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 49.0 failed 4 times, most recent failure: Lost task 0.3 in stage 49.0 (TID 277, 10.6.60.217): java.lang.NoClassDefFoundError: Lorg/apache/zeppelin/spark/ZeppelinContext;

+0

都市がすでに値「NY」を割り当てているため、最初の行が正常に実行されました。クラス 'org.apache.zeppelin.spark.ZeppelinContext'は、確実にZeppelinにパックされます。私はあなたが特定の方法でおそらくユーザーzの外部スパークで走っていると思います。コードを別の段落に分割して実行してみてください。 –

+0

はい私は外部Sparkで走っています。 2つの段落に分割した後も同じエラーが発生する –

答えて

0

あなたは間違った方向にこれを取っている:

val city="NY" 

は文字列としてNYを持つスカラ文字列を返しますが、あなたが言うときは

これはあなたにdataFrameを返し、メソッドtoStringを使用してこのオブジェクトをStringに変換してから比較しようとしています。

これは機能しません!

あなたが行うことができるのは、1つのdFを収集し、それに応じてscala Stringを他のDfに渡すか、複数の値に対して行う場合は結合を行うことです。

しかし、このアプローチは確実に機能しません。

+0

z変数はdataFrameではありません。 Zeppelin Contextはデフォルト変数なので、selectメソッドはSparkのDataFrameのselectメソッドではありません。このselectメソッドは、toStringを使用してStringに変換されたObjectを返します。 –

+0

toStringを適用した後に値を取得すると、それを印刷できますか? –

+0

はい、私はそれを印刷することができます。問題は、変数がDataFrameのフィルタメソッド内で使用されている場合です。最近、Sparkのドライバの外で、そしてorg.apache.zeppelin.spark.ZeppelinContextが存在しないリモートノードで評価されるような縫い目があります。 Zeppelinはローカルドライバを使用し、Sparkクラスタにアプリケーションとアプリケーションを送信します –

関連する問題