Spark Shell 导入正常,但在引用类时抛出错误

Posted

技术标签:

【中文标题】Spark Shell 导入正常,但在引用类时抛出错误【英文标题】:Spark Shell Import Fine, But Throws Error When Referencing Classes 【发布时间】:2016-10-10 21:57:57 【问题描述】:

我是 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

import for OrcInputFormat 工作似乎很奇怪(我假设它工作,因为没有引发错误),但随后出现上述错误消息。基本上,我正在尝试从 S3 读取 ORC 文件。

我也在研究我做错了什么,以及为什么会发生这种情况。

我做了什么:

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

【问题讨论】:

【参考方案1】:

您在上次导入时在 org.apeche 之间有 2 个非打印字符,这肯定是由于复制粘贴:

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

只需重写最后一个导入语句,它就会起作用。你也不需要这些分号。

OrcInputFormat 也有同样的问题:

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

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

【讨论】:

谢谢!那是一个非常狡猾的...虽然这似乎无法解决error: type OrcInputFor‌​mat is not a member of package org.apache.hadoop.hive.ql.io.orc,但不幸的是... 查看我的更新,同样的问题和同样的解决方案!如果对您有帮助,请接受/投票我的回答,谢谢

以上是关于Spark Shell 导入正常,但在引用类时抛出错误的主要内容,如果未能解决你的问题,请参考以下文章

SKLabelNode 添加到类时抛出试图添加 nil 节点错误

Spark 在尝试保存 CSV 文件时抛出错误

Spark 2.0.0 在与 Hive 1.0.0 交互时抛出 AlreadyExistsException(message:Database default already exists)

Ruby脚本在cron运行时抛出错误,但在用户运行时不会

ReactJs 在导入 svg 文件时抛出错误

正则表达式模式选择正确的子字符串,但在运行宏 vba 时抛出错误