Spark Shell导入很好,但在引用类时会引发错误

时间:2016-10-10 21:57:57

标签: scala hadoop apache-spark

我是Apache Spark的初学者,所以如果这非常简单,请原谅。

基本上,我在spark-shell中运行了以下导入:

import org.apache.spark.sql.{DataFrame, Row, SQLContext, DataFrameReader}
import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.sql._
import org.apache.hadoop.hive.ql.io.orc.{OrcInputFormat,OrcStruct};
import org.apa‌​che.hadoop.io.NullWritable;
...

val rdd = sc.hadoopFile(path, 
    classOf[org.apache.hadoop.hive.ql.io.orc.OrcInputFor‌​mat], 
    classOf[NullWritable], 
    classOf[OrcStruct],
    1)

直到OrcInputFormat的导入语句工作正常,但例外:

error: object apa‌​che is not a member of package org import org.apa‌​che.hadoop.io.NullWritable;

如果之前的import语句没有任何问题,那就没有意义了。

此外,在引用OrcInputFormat时,我被告知:

error: type OrcInputFor‌​mat is not a member of package org.apache.hadoop.hive.ql.io.orc

导入OrcInputFormat似乎很奇怪(我认为它有效,因为没有抛出错误),但随后出现上述错误消息。基本上,我试图从S3中读取ORC文件。

我也在看我做错了什么,以及为什么会这样。

我做了什么:

  1. 我尝试使用spark-shell选项运行--jars,并尝试导入hadoop-common-2.6.0.jar(我当前版本的Spark是1.6.1,使用Hadoop 2.6编译)
  2. val df = sqlContext.read.format("orc").load(PathToS3),由(Read ORC files directly from Spark shell)引用。我尝试过S3,S3n,S3a的变种,没有任何成功。

1 个答案:

答案 0 :(得分:1)

在上一次导入中,Assembly.LoadFromorg.ape之间有2个非打印字符,大部分是由于复制粘贴:

che

只需重写最后一个import语句即可。你也不需要这些分号。

OrcInputFormat遇到同样的问题:

import org.apa‌​che.hadoop.io.NullWritable;

有趣的是,在Stackoverflow的移动版本中,我们可以清楚地看到那些非打印字符:

enter image description here