split方法如何创建pairfunction?

z18hc3ub  于 2021-05-29  发布在  Spark
关注(0)|答案(1)|浏览(352)

在下面的代码中 PairFunction 它将数组列表拆分为键和值。

private static PairFunction<String,String,Integer> getNameAndAgePair() {
  return (PairFunction<String,String,Integer>) s -> 
    new Tuple2<>(
      s.split(" ")[0],
      Integer.valueOf(s.split(" ")[1]));
}

请有人解释一下这到底是怎么回事。我无法理解这里的拆分,我知道他们试图创建键和值,但为什么在这两个索引中都有按空间拆分。

Tuple2<>(s.split(" ")[0], Integer.valueOf(s.split(" ")[1]));}

此代码将javardd转换为javapairdd,此代码是用javasparkrdd编写的。基本上这段代码涵盖了如何从普通rdd创建pairrdd?

import java.util.Arrays;
        import java.util.List;

        import org.apache.spark.SparkConf;
        import org.apache.spark.api.java.JavaPairRDD;
        import org.apache.spark.api.java.JavaRDD;
        import org.apache.spark.api.java.JavaSparkContext;
        import org.apache.spark.api.java.function.PairFunction;

        import scala.Tuple2;

        public class PairRDDFromRegularRDD {

        public static void main(String[] args) {

            SparkConf conf = new SparkConf().setAppName("Pair Rdd From Regular 
            RDD").setMaster("local[*]");

            JavaSparkContext sc = new JavaSparkContext(conf);

            List<String> inputString = Arrays.asList("Lily 23", " jack 29", "mary 29", 
            "James 8");

            JavaRDD<String> regularRDDs = sc.parallelize(inputString);

            JavaPairRDD<String,Integer> pairRDD = 
            regularRDDs.mapToPair(getNameAndAgePair());
        }

        private static PairFunction<String,String,Integer> getNameAndAgePair() {
            // TODO Auto-generated method stub
            return (PairFunction<String,String,Integer>) s -> new Tuple2<>(s.split(" ") 
            [0],Integer.valueOf(s.split(" ")[1]));
        }

        }
6tdlim6h

6tdlim6h1#

我无法理解这里的拆分,我知道他们试图创建键和值,但为什么在这两个索引中都有按空间拆分。
如果你不介意的话,我就用Spark壳来解释。

scala> val s = "hello world"
s: String = hello world

// In Java you'd use s.split(" ")[0]
scala> val key = s.split(" ")(0)
key: String = hello

scala> val value = s.split(" ")(1)
value: String = world

换句话说, split 方法通过给定的分隔符(在您的例子中是一个空格)将字符串分割成块。访问第0块和第1块是分别访问键和值的值。
实际上,它更像java/scala而不是spark。

相关问题