我尝试在spark中读取一个csv文件,并且我想分割以逗号分隔的行,以便具有带二维数组的RDD。我是Spark的新手。
我尝试这样做:
public class SimpleApp
{
public static void main(String[] args) throws Exception
{
String master = "local[2]";
String csvInput = "/home/userName/Downloads/countrylist.csv";
String csvOutput = "/home/userName/Downloads/countrylist";
JavaSparkContext sc = new JavaSparkContext(master, "loadwholecsv", System.getenv("SPARK_HOME"), System.getenv("JARS"));
JavaRDD<String> csvData = sc.textFile(csvInput, 1);
JavaRDD<String> words = csvData.map(new Function <List<String>>() { //line 43
@Override
public List<String> call(String s) {
return Arrays.asList(s.split("\\s*,\\s*"));
}
});
words.saveAsTextFile(csvOutput);
}
}
这应该分割行并返回ArrayList。但我对此不确定。我收到此错误:
SimpleApp.java:[43,58] wrong number of type arguments; required 2
因此,该程序存在两个小问题。首先,您可能希望使用flatMap而不是map,因为您尝试返回单词的RDD而不是单词列表的RDD,所以我们可以使用flatMap来使结果平坦。另一个是,我们的函数类还需要调用它的输入的类型。我将JavaRDD单词替换为:
JavaRDD<String> words = rdd.flatMap(
new FlatMapFunction<String, String>() { public Iterable<String> call(String s) {
return Arrays.asList(s.split("\\s*,\\s*"));
}});
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句