java - 如何解决此错误“类型不匹配:无法从列表转换到迭代器"
问题描述
我是java8和spark的新手,我试图在java中执行简单的平面图转换程序,但是我在倒数第二行的平面图转换中遇到了一些错误,Arrays.asList(e.split(" ")));
错误是
类型不匹配:无法转换
List<String>
为Iterator<String>
这个问题的适当解决方案是什么。提前致谢
import java.util.Arrays;
import java.util.List;
import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.commons.lang.StringUtils;
public class FlatMapExample {
public static void main(String[] args) throws Exception {
SparkConf sparkConf = new
SparkConf().setMaster("local").setAppName("filter
transformation");
JavaSparkContext sc = new JavaSparkContext(sparkConf);
// Parallelized with 2 partitions
JavaRDD<String> rddX = sc.parallelize(
Arrays.asList("spark rdd example", "sample example"),
2);
// map operation will return List of Array in following case
JavaRDD<String[]> rddY = rddX.map(e -> e.split(" "));
List<String[]> listUsingMap = rddY.collect();
for(int i = 0; i < listUsingMap.size(); i++)
{
System.out.println("list.."+StringUtils.join(listUsingMap.get(i)));
}
//System.out.println("listUsingMap..."+listUsingMap.collect());
// flatMap operation will return list of String in following case
JavaRDD<String> rddY2 = rddX.flatMap(e -> Arrays.asList(e.split(" ")));
List<String> listUsingFlatMap = rddY2.collect();
}
}
解决方案
您应该指定您使用的至少版本实际上返回一个2.0
而不是(例如在 1.6 中就是这种情况)。因此,假设您返回 a ,而返回 a 。FlatMapFunction::call
Iterator
Iterable
rddX.flatMap
Iterator<String>
Arrays.asList(e.split(" "))
List<String>
但是List::iterator
你可以使用,如:
rddX.flatMap(e -> Arrays.asList(e.split(" ")).iterator())
推荐阅读
- python - 如何将图例添加到我在 seaborn 中使用 for 循环制作的情节中?
- mongodb - Scala MongoDB 驱动程序的磁铁模式
- javascript - 更新依赖项后,如何让 Visual Studio Code IDE 更新类型?
- twilio - Twilio 无法记录来电对话(与留言无关)
- python - 在 jupyter notebook 中使用变量名运行 py 文件
- r - 在R中另一个数据帧的特定位置添加一个数据帧的行
- javascript - 无法一次在三个地方读取 null 的属性“样式”
- ios - 使用 showBluetoothAccessoryPicker 会导致 SceneDelegate 出现错误
- python - 计算数组中介于 0 和 1 之间的所有值
- ios - 正在调用 CollectionView `DidSelect` 方法但没有推送下一个 VC,如何解决?