【发布时间】:2015-01-05 05:31:42
【问题描述】:
我尝试在 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
【问题讨论】:
-
您还需要添加输入类型参数:
new Function <String, List<String>>() -
顺便说一句,您很可能想使用
flatMap和FlatMapFunction(cs.berkeley.edu/~pwendell/strataconf/api/core/spark/api/java/…)。 -
btw2,你应该学习一些 Scala。让使用 Spark 变得如此简单:
csvData.map(line => line.split("\\s*,\\s*")) -
谢谢大家! @maasg:我为一个大学项目做这个,我必须使用 java。
-
@satish 不幸的是我不太擅长解释事情,也许你可以通过互联网搜索找到好的教程。基本上从带有函数 a->list 的 list 映射生成一个 list
- >,而 flatMap 将内部列表展平并变成一个 list。
标签: java csv apache-spark