Scala使用foldLeft时报object RDD does not take type parameters错误如何解决
错误原因
RDD[(String, Iterable[SomeClass])]写法不符合Spark API规范。Spark的RDD伴生对象没有提供带类型参数的直接构造方法,该写法会被识别为给RDD伴生对象传入类型参数,因此抛出对应报错。
解决方案
foldLeft的第一个参数需要传入目标类型的空RDD作为初始值,你需要通过SparkContext实例的emptyRDD方法构造:
- 若直接使用SparkContext实例(通常命名为
sc),将初始值替换为sc.emptyRDD[(String, Iterable[SomeClass])] - 若使用Spark 2.x+的SparkSession实例(通常命名为
spark),可通过spark.sparkContext.emptyRDD[(String, Iterable[SomeClass])]构造
修正后的完整代码:
items.foldLeft(sc.emptyRDD[(String, Iterable[SomeClass])])((total, item) => total.union(fetchRDD(item)))
注:原代码末尾缺少1个右括号,上述修正代码已补齐。
内容的提问来源于stack exchange,提问作者Jelly
相关产品推荐
相关产品推荐

