2016-06-10 85 views
0

使用的Avro时,我不断收到NoClassDefFoundError的火花外壳

java.lang.NoClassDefFoundError: org/apache/avro/mapred/AvroWrapper

一个数据帧对象上调用show()时。我试图通过外壳(火花外壳 - 主丝)做到这一点。我可以看到shell在创建DataFrame对象时识别模式,但是如果我对数据执行任何操作,尝试实例化AvroWrapper时总会抛出NoClassDefFoundError。我试过在群集的$HDFS_USER/lib目录中添加avro-mapred-1.8.0.jar,甚至在启动shell时使用--jar选项将其包含在内。这些选项都不起作用。任何建议将不胜感激。下面是示例代码:

scala> import org.apache.spark.sql._ 
scala> import com.databricks.spark.avro._ 
scala> val sqc = new SQLContext(sc) 
scala> val df = sqc.read.avro("my_avro_file") // recognizes the schema and creates the DataFrame object 
scala> df.show // this is where I get NoClassDefFoundError 

回答

0

如果有人遇到这个问题,我终于解决了。我删除了CDH火花包,并从http://spark.apache.org/downloads.html下载它。之后,一切正常。不确定CDH版本的问题是什么,但我不会浪费时间去解决问题。

1

数据帧对象本身在val df =...线被创建,但数据尚未读出。当您询问某种输出时(如df.count()df.show()),Spark仅开始读取和处理数据。

所以最初的问题是avro-mapred软件包丢失。 尝试启动您星火壳牌这样的:

spark-shell --packages org.apache.avro:avro-mapred:1.7.7,com.databricks:spark-avro_2.10:2.0.1 星火包装的Avro作为标志提供的Avro公司Mapred包,但它不是你的系统(或类路径)一个或其他原因上。

+0

它似乎只是坐在那里。将不会超越。 'org.apache.avro#avro-mapred添加为依赖关系' 'com.databricks#spark-avro_2.10添加为依赖关系' ':: resolving dependencies :: org.apache.spark#spark-submit -parent; 1.0' \t'confs:[default]' – Pudge

+0

这很奇怪。你能粘贴你用来启动spark-shell的整个命令吗? –

+0

对延迟响应抱歉我不得不将任务切换几天。这里是我正在运行的命令'spark-shell --master yarn --packages org.apache.avro:avro-mapred:1.7.7,com.databricks:spark-avro_2.10:2.0.1'。此外,不知道它是否有所作为,但我们正在运行CDH 5.6。再次感谢。 – Pudge