Apache spark Spark Streaming通过唯一ID从数据流创建多个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

有几个问题:

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.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

  • 另外,只有公共字段是预先知道的,其他字段是预先知道的 每个项目的唯一性是动态的

  • 项目也不会预先知道

从数据流,我在RDD上循环:

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以应用模式。