如何在 spark 2(java) 中创建广播变量?

Posted

技术标签:

【中文标题】如何在 spark 2(java) 中创建广播变量?【英文标题】:how to create broadcast variable in spark 2(java)? 【发布时间】:2017-08-26 13:16:12 【问题描述】:

在 Spark 1 中,我们可以使用以下代码创建 Spark 广播变量:

SparkConf conf = new SparkConf();
conf.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer");

JavaSparkContext sc = new JavaSparkContext("local", "JavaAPISuite", conf);

ArrayList<Strin'valuesg> sampleList = new ArrayList<String>();
sampleList.add("value");

final Broadcast<ArrayList<String> broadcastVar = sc.broadcast(sampleList);

我们如何在 Spark 2 中使用如下所示的 API 做同样的事情?

SparkSession sc = SparkSession.setappName("SparkApp").getorcreate();
sc.sparkcontext().broadcast(T value, scala.reflect.ClassTag<T> evidence$11)

【问题讨论】:

spark.apache.org/docs/latest/… hi cricket_007...链接显示的是 Spark 1 类型...不是 Spark2 的 SparkSession 什么意思?你需要一个 SparkContext 来广播。您从 Spark 会话中获取上下文 顺便说一句,你复制了错误的函数。有一个参数,值...隐式参数可以忽略broadcast[T](value: T)(implicit arg0: ClassTag[T]): Broadcast[T] @cricket_007...根据Java的spark api文档,我需要输入参数来创建广播变量..如下所示广播广播(T值,scala。 reflect.ClassTag evidence$11) 向集群广播一个只读变量,返回一个广播对象以便在分布式函数中读取它。 【参考方案1】:

例如,如果你想广播名为 Test 的类,它应该实现 java.io.Serializable 然后你这样做:

import scala.reflect.ClassTag;

ClassTag<Test> classTagTest = scala.reflect.ClassTag$.MODULE$.apply(Test.class);
Broadcast<Test> broadcastTest = sc.sparkcontext().broadcast(new Test(), classTagTest);

【讨论】:

以上是关于如何在 spark 2(java) 中创建广播变量?的主要内容,如果未能解决你的问题,请参考以下文章

如何在Spark Java中创建复杂的StructType架构

如何在 Java 中创建一个接受字符串数组的 Spark UDF?

Spark学习之路 Spark的广播变量和累加器

Spark-scalaI-API

带有广播连接的 Spark 流式传输

如何在 Android 中创建广播流