java - 如何在 Java Spark 中生成随机 RDD

标签 java random apache-spark

基本上我想要这样的东西,

int count = 100;
Java<String> myRandomRDD = generate(count, new Function<String, String>() {
        @Override
        public String call(String arg0) throws Exception {
            return RandomStringUtils.randomAlphabetic(42);
        }
    });

理论上我可以使用 Spark RandomRDD,但我无法让它正常工作。我不知所措的选择。我应该使用 RandomRDDs::randomRDD 还是 RandomRDDs::randomRDDVector?还是应该使用 RandomVectorRDD

我试过以下方法,但我什至无法获得正确的语法。

    RandomRDDs.randomRDD(jsc, new RandomDataGenerator<String>() {

        @Override
        public void setSeed(long arg0) {
            // TODO Auto-generated method stub

        }

        @Override
        public org.apache.spark.mllib.random.RandomDataGenerator<String> copy() {
            // TODO Auto-generated method stub
            return null;
        }

        @Override
        public String nextValue() {
            RandomStringUtils.randomAlphabetic(42);
        }
    }, count, ??);

文档很少,我很困惑,如果有任何帮助,我将不胜感激。

谢谢!

最佳答案

我能想到的最简单的解决方案是:

JavaRDD<String> randomStringRDD = RandomRDDs.uniformJavaRDD(jsc, numRows).map((Double d) -> RandomStringUtils.randomAlphabetic(42));

这是一个更完整的本地测试示例:

    SparkConf conf = new SparkConf().setAppName("Test random").setMaster("local");
    JavaSparkContext jsc = new JavaSparkContext(conf);

    int numRows= 10;//put here how many rows you want
    JavaRDD<String> randomStringRDD = RandomRDDs.uniformJavaRDD(jsc, rows).map((Double d) -> RandomStringUtils.randomAlphabetic(42));

    //display (to use only on small dataset)
    for(String row:randomStringRDD.collect()){
        System.out.println(numRows);
    }

CPU 开销很小,因为不需要生成初始随机数集,但它负责创建分区等。

如果避免这种小的开销对您很重要,并且您想在 10 个分区中生成 100 万行,您可以尝试以下方法:

  1. 通过 jsc.emptyRDD() 创建一个空的 rdd
  2. 通过repartition设置分区,创建10个分区
  3. 使用 mapPartition 函数创建 100 万/10 个分区 = 每个分区 100000 行。您的 RDD 已准备就绪。

旁注:

  • 公开 RandomRDDs.randomRDD() 类会使事情变得更简单,但不幸的是,事实并非如此。
  • 但是,RandomRDDs.randomVectorRDD() 是公开的,因此如果您需要生成随机 vector ,您可以使用它。 (但你在这里要求字符串,所以这不适用)。

关于java - 如何在 Java Spark 中生成随机 RDD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32594698/

相关文章:

java - SmartXLS 中列号和行号的公式地址 (java)

javascript - 我的网络 worker 似乎没有正确计算

javascript - 是否有可能 Math.random() === Math.random()

hadoop - 如何从JavaSparkContext获取HiveContext

java - Apache Spark 我在这里坚持了什么?

java - Ganib (Java) - 无法发送验证邮件

java - Camel 向 OracleAQ 发送消息问题

Java + Android Jetpack + Dagger 2 在 ViewModel 中注入(inject)

java - 如何从 2D 表格上设置的房间列表(给定房间大小)生成房间以及它们之间的连接?

apache-spark - 为什么spark在sql查询的末尾追加 'WHERE 1=0'