Apache spark Spark Streaming通过唯一ID从数据流创建多个RDD/数据帧
有几个问题: 1) 通过唯一ID从现有RDD创建多个RDD/数据帧的最佳方法是什么 2) 这可以在数据流级别上完成吗 我希望能够基于现有RDD的项目ID创建一组不同的RDD/数据帧。主RDD将包含不同的数据,如下所示:Apache spark Spark Streaming通过唯一ID从数据流创建多个RDD/数据帧,apache-spark,spark-streaming,spark-dataframe,rdd,Apache Spark,Spark Streaming,Spark Dataframe,Rdd,有几个问题: 1) 通过唯一ID从现有RDD创建多个RDD/数据帧的最佳方法是什么 2) 这可以在数据流级别上完成吗 我希望能够基于现有RDD的项目ID创建一组不同的RDD/数据帧。主RDD将包含不同的数据,如下所示: {"ApplicationVersion":"1.0.3 (65)","ProjectId":30024,"TargetId":"4138","Timestamp":"2017-06-29T09:25:46.0791317Z"} {"ApplicationVersion":"1
{"ApplicationVersion":"1.0.3 (65)","ProjectId":30024,"TargetId":"4138","Timestamp":"2017-06-29T09:25:46.0791317Z"}
{"ApplicationVersion":"1.0.3 (65)","ProjectId":30025,"TargetId":"4138","Timestamp":"2017-06-29T09:25:46.0791317Z","ProjectId30025Field":"SomeValue"}
{"ApplicationVersion":"1.0.3 (65)","ProjectId":30026,"TargetId":"4138","Timestamp":"2017-06-29T09:25:46.0791317Z","ProjectId30026Field":"SomeValue"}
- 有些字段很常见,但会有其他/不同的字段 根据projectID,即projectID 30024可能还有两个 字段vs projectd 30025
- 另外,只有公共字段是预先知道的,其他字段是预先知道的 每个项目的唯一性是动态的
- 项目也不会预先知道
val kinesisStream = KinesisUtils.createStream(
ssc, appName, "Kinesis_Stream", "kinesis.ap-southeast-1.amazonaws.com",
"region", InitialPositionInStream.LATEST, kinesisCheckpointInterval, StorageLevel.MEMORY_AND_DISK_2)
val lines = kinesisStream.map(x => new String(x))
lines.foreachRDD((rdd, time) =>{
val sqlContext = SQLContextSingleton.getInstance(rdd.sparkContext)
if(rdd.count() > 0){
//Can I create multiple RDDs/DataFrame here?
//dataFrameforProjId30024
//dataFrameforProjId30025
//dataFrameforProjId30026
}
})
我希望通过projectId进行分离的原因是,当我创建数据帧时,我希望模式特定于projectId,并且我希望以后能够通过projectId单独导出数据
提前感谢。//我可以在这里创建多个RDD/DataFrame吗?->是的,您可以。ProjectId“:xxxxx事先知道吗?不,它们在您应用筛选器之前是不知道的。您可以根据筛选器将数据路由到rdd集合,以转换为数据帧以应用架构。//我可以在此处创建多个rdd/数据帧吗?->可以。ProjectId“:xxxxx事先知道吗?不,它们在您应用过滤器之前是未知的,您可以根据过滤器将数据路由到rdd集合中,以转换为dataframe以应用模式。