我有一个JavaRDD对象,想要通过选择原始子对象的子字符串来创建另一个新的JavaRDD对象。怎么实现呢?
// Read input_train data
logger.info("start to read file");
JavaRDD<String> inputDataRaw= sc.textFile(input_train);
inputDataRaw.first()类似于:&#34; apple1; apple2;&#34; (比如String s1)
我希望JavaRDD的每一行都包含&#34; apple1&#34;只是,即:,
String s2 = s1.substring(0, 6)
答案 0 :(得分:0)
JavaRDD<String> inputDataRaw= sc.textFile(input_train);
inputDataRaw.new Function<String>() {
public String call(String arg0) throws Exception {
return arg0.substring(0,6);
}
});
答案 1 :(得分:0)
以下是简单的选项。我包含了较新的JDK8 lambda语法以及较旧的JDK6兼容语法:
JavaRDD<String> inputDataRaw = sc.textFile("file.txt");
JavaRDD<String> mapped_jdk8 = inputDataRaw.map(s -> s.substring(0, 6));
JavaRDD<String> mapped_jdk6 = inputDataRaw.map(new Function<String, String>() {
@Override
public String call(String s) throws Exception {
return s.substring(0, 6);
}
});
答案 2 :(得分:0)
我认为从字符串中抓取第一个对象不是一个好主意。
substring(0,6) # this will help only when first object is of fixed size.
而是先将线分开; (逗号)并抓住第一个索引
JavaRDD<String> inputDataRaw = sc.textFile("file.txt");
JavaRDD<String> mapped_jdk8 = inputDataRaw.map(s -> s.split(";")).map(r -> r(0));
如果你在java中遇到任何语法错误,请尝试r [0],我没有在java中尝试过lambda,但我只做了scala