【问题标题】:access Broadcast Variables in Spark java在 Spark java 中访问广播变量
【发布时间】:2016-12-21 06:08:59
【问题描述】:

我需要使用 Java RDD API 处理 spark 广播变量。这是我迄今为止尝试过的代码:

这只是检查其是否有效的示例代码?就我而言,我需要处理两个 csvfiles。

          SparkConf conf = new SparkConf().setAppName("BroadcastVariable").setMaster("local");
          JavaSparkContext ctx = new JavaSparkContext(conf);
          Map<Integer,String> map = new HashMap<Integer,String>();
          map.put(1, "aa");
          map.put(2, "bb");
          map.put(9, "ccc");
          Broadcast<Map<Integer, String>> broadcastVar = ctx.broadcast(map);
          List<Integer> list = new ArrayList<Integer>();
          list.add(1);
          list.add(2);
          list.add(9);
          JavaRDD<Integer> listrdd = ctx.parallelize(list);
          JavaRDD<Object> mapr = listrdd.map(x -> broadcastVar.value());
          System.out.println(mapr.collect());

它会像这样打印输出:

[{1=aa, 2=bb, 9=ccc}, {1=aa, 2=bb, 9=ccc}, {1=aa, 2=bb, 9=ccc}]

我的要求是:

 [{aa, bb, ccc}]

可以按照我要求的方式做吗?

【问题讨论】:

    标签: apache-spark apache-spark-sql lookup rdd broadcast


    【解决方案1】:

    我用JavaRDD&lt;Object&gt; mapr = listrdd.map(x -&gt; broadcastVar.value().get(x)); 插入JavaRDD&lt;Object&gt; mapr = listrdd.map(x -&gt; broadcastVar.value());

    它现在可以工作了。

    【讨论】:

    • 这是在集群中工作,我有相同的要求,但它没有按预期工作。withColumn("five", lit(((Map)lookUpMapBcVar.getValue())。 get(5)) ) .withColumn("map_code3", lit(((Map)lookUpMapBcVar.getValue()).get(col("floor_code3_int"))) ) .withColumn("five_lit", lit (((Map)lookUpMapBcVar.getValue()).get(lit(5).cast(DataTypes.IntegerType))));除了这个 ---(lookUpMapBcVar.getValue()).get(5)) ——没有任何工作......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多