如何编写SPARK map函数来返回JAVA中的子字符串?

时间:2015-04-20 16:38:08

标签: java apache-spark

我有一个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)

3 个答案:

答案 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