【发布时间】:2015-02-26 00:21:51
【问题描述】:
我正在尝试使用交互式 Scala shell 将一些数据从 hadoop 读取到 Spark 中的 RDD,但我无法访问一些需要反序列化数据的类。
我首先导入必要的类
import com.example.ClassA
效果很好。 ClassA 位于 'jars' 路径中的 jar 中,并将 ClassB 作为公共静态嵌套类
然后我尝试像这样使用ClassB:
val rawData = sc.newAPIHadoopFile(dataPath, classOf[com.exmple.mapreduce.input.Format[com.example.ClassA$ClassB]], classOf[org.apache.hadoop.io.LongWritable], classOf[com.example.ClassA$ClassB])
由于其他类之一将ClassB 作为一种类型,这有点复杂,但我认为应该没问题。
当我执行此行时,我收到以下错误:
<console>:17: error: type ClassA$ClassB is not a member of package com.example
我也尝试过使用 import 语句
import com.example.ClassA$ClassB
而且看起来也不错。
任何关于如何进行调试的建议将不胜感激
感谢阅读。
更新:
将“$”更改为“.”引用嵌套类似乎解决了这个问题,虽然我得到了以下语法错误:
'<console>:17: error: inferred type arguments [org.apache.hadoop.io.LongWritable,com.example.ClassA.ClassB,com.example.mapreduce.input.Format[com.example.ClassA.ClassB]] do not conform to method newAPIHadoopFile's type parameter bounds [K,V,F <: org.apache.hadoop.mapreduce.InputFormat[K,V]]
【问题讨论】:
-
我应该提一下,我使用的是 Spark 1.2.0
-
抱歉,是的,它是嵌套类而不是子类——我的错
-
你试过使用
com.example.ClassA.ClassB吗? -
刚刚尝试了一下,得到了 '
:17: error: inferred type arguments [org.apache.hadoop.io.LongWritable,com.example.ClassA.ClassB,com.example .mapreduce.input.Format[com.example.ClassA.ClassB]] 不符合方法 newAPIHadoopFile 的类型参数界限 [K,V,F <: org.apache.hadoop.mapreduce.inputformat>
标签: scala apache-spark