2016-10-20 82 views
0

我有兩天的麻煩已經齊柏林飛艇裏面輸入值的時候,並不能找到任何解決方案。ClassNotFoundException的:org.apache.zeppelin.spark.ZeppelinContext使用火花數據幀的過濾方法

我使用的火花數據幀的過濾方法中輸入值時得到

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」類肯定會放在齊柏林飛艇中。我想你運行一個外部的Spark,可能以某種方式用戶z。嘗試在不同的段落中分割代碼並運行它。 –

+0

是的,我正在用外部Spark運行。分割成兩段後出現同樣的錯誤 –

回答

0

你在錯誤的方向走這樣的:

val city="NY" 

爲您提供了一個以NY作爲字符串的字符串,但是當您說

z.select("City",cities) 

然後這會返回你的數據幀,然後你正在使用方法toString將這個對象轉換爲字符串,然後試圖比較。

這不會工作!

你能做的要麼是收集一個DF,然後相應地傳遞斯卡拉串入其他Df的,也可以做,如果你想這樣做多個值的加入。

但這種方法不適用於確保工作!

+0

z變量它不是dataFrame。 Zeppelin Context默認變量,因此select方法不是Spark的DataFrame中的select方法。這個select方法返回一個Object,該Object通過toString轉換爲String。 –

+0

在應用toString之後你會得到這個值,你能打印它嗎? –

+0

是的,我確定我可以打印它。問題是在DataFrame的過濾方法中使用變量的時候。它接近最近在Spark驅動之外進行評估,並且在沒有org.apache.zeppelin.spark.ZeppelinContext的遠程節點上進行評估。 Zeppelin使用本地驅動程序並將其提交併應用到Spark羣集 –