Mysql 创建sparkstreaming上下文后在spark中缓存RDMS数据

Mysql 创建sparkstreaming上下文后在spark中缓存RDMS数据,mysql,hadoop,caching,apache-spark,spark-streaming,Mysql,Hadoop,Caching,Apache Spark,Spark Streaming,我们使用Spark流使用createDirectStream从Kafka获取数据 在同一个程序中,我连接到MYSQL以从数据库中获取一些数据。现在我想使用spark缓存这个结果 这里的问题是我一开始就创建了一个spark流上下文,现在要缓存这个MYSQL数据,我必须将其转换为RDD,这只有在spark上下文的帮助下才能实现,不幸的是,我无法创建spark上下文(因为已经根据spark流创建了上下文) 我不想设置spark.driver.allowMultipleContexts=true以允许J

我们使用Spark流使用createDirectStream从Kafka获取数据

在同一个程序中,我连接到MYSQL以从数据库中获取一些数据。现在我想使用spark缓存这个结果

这里的问题是我一开始就创建了一个spark流上下文,现在要缓存这个MYSQL数据,我必须将其转换为RDD,这只有在spark上下文的帮助下才能实现,不幸的是,我无法创建spark上下文(因为已经根据spark流创建了上下文)

我不想设置
spark.driver.allowMultipleContexts=true
以允许JVM使用多于spark的上下文,因为这可能会导致问题


有没有一种方法可以使用spark缓存这个数据,或者我们如何将MYSQL的结果转换为RDD?

根据您对问题的描述,这里就是。让我们来考虑一下,你正在启动一个StreamingContext:
val conf = new SparkConf().setMaster("local[2]").setAppName("NetworkWordCount")
val ssc = new StreamingContext(conf, Seconds(1))
val sc = ssc.sparkContext
您始终可以从流媒体上下文中获取SparkContext,如下所示:

val conf = new SparkConf().setMaster("local[2]").setAppName("NetworkWordCount")
val ssc = new StreamingContext(conf, Seconds(1))
val sc = ssc.sparkContext

然后做你想做的事。这是与您的流媒体上下文相关联的Spark上下文,因此无需为此创建新的Spark上下文。

这个问题的主题太广泛,无法在此回答。试着观察一下Alluxio(例如Tachyon)Tachyon就在那里。我只是想知道是否可以在这里以某种方式创建RDD,或者使用streamingcontext缓存它(如果不可能创建RDD)。您可以始终使用jdbc格式的dataframe read api从mysql提取数据,然后将其转换为RDD[行]使用.rdd并按您的意愿使用它,但是创建数据帧不需要sparkcontext,这同样会导致两个上下文。MySQL中的数据在流作业的生命周期内会发生变化吗?是否要将这些更改“拉”到流媒体中?忘记streamingcontext在sparkcontext中。谢谢,我会尝试并接受你的回答。你的问题也让我有点困惑:)我以为你在尝试两个独立的环境