我有以下代码:
val conf = new SparkConf().setAppName("MyApp")
val sc = new SparkContext(conf)
conf.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer")
new conf.registerKryoClasses(new Class<?>[]{
Class.forName("org.apache.hadoop.io.LongWritable"),
Class.forName("org.apache.hadoop.io.Text")
});
但是我遇到了以下错误:
')' expected but '[' found.
[error] new conf.registerKryoClasses(new Class<?>[]{
我该如何解决这个问题?
答案 0 :(得分:5)
你正在混合使用Scala和Java。在Scala中,您可以定义Array[Class[_]]
(而不是Class<?>[]
):
val conf = new SparkConf()
.setAppName("MyApp")
.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer")
.registerKryoClasses(Array[Class[_]](
Class.forName("org.apache.hadoop.io.LongWritable"),
Class.forName("org.apache.hadoop.io.Text")
));
val sc = new SparkContext(conf)
我们甚至可以做得更好。为了不使用字符串文字使我们的类错误,我们实际上可以使用这些类并使用classOf
来获取它们的类类型:
import org.apache.hadoop.io.LongWritable
import org.apache.hadoop.io.Text
val conf = new SparkConf()
.setAppName("MyApp")
.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer")
.registerKryoClasses(Array[Class[_]](
classOf[LongWritable],
classOf[Test],
))
val sc = new SparkContext(conf)