有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java split方法如何创建PairFunction?

在下面的代码中有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转换为JavaPairRDD,这段代码是用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]));
        }

        }

共 (1) 个答案

  1. # 1 楼答案

    I am unable to understand the split here, I know they are trying to create Key and Value but why is there split by space in both the Indexes.

    如果你不介意的话,我将用spark shell来解释

    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