Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 大RDD与多个小RDD_Apache Spark_Partitioning_Rdd - Fatal编程技术网

Apache spark 大RDD与多个小RDD

Apache spark 大RDD与多个小RDD,apache-spark,partitioning,rdd,Apache Spark,Partitioning,Rdd,历史数据: 每个活动都有多个表,其中包含一些历史信息,如GRP和CPP 我有多个维度,每个活动都定义了GRP和CPP 维度-地理位置、时间段、主消息 每个活动可能包含这些维度的子集 示例 Activity1 {Geography, TimePeriod, GRP, CPP} Activity2 {TimePeriod, GRP, CPP} Activity3 {Primary_Message, TimePeriod, GRP, CPP} 用例: 有时,我希望跨时间段查看数据(此 维度

历史数据:

  • 每个活动都有多个表,其中包含一些历史信息,如GRP和CPP
  • 我有多个维度,每个活动都定义了GRP和CPP
    维度-地理位置、时间段、主消息
  • 每个活动可能包含这些维度的子集
  • 示例

     Activity1 {Geography, TimePeriod, GRP, CPP}
    
     Activity2 {TimePeriod, GRP, CPP}
    
     Activity3 {Primary_Message, TimePeriod, GRP, CPP}
    
    用例:

  • 有时,我希望跨时间段查看数据(此 维度适用于所有活动)适用于所有活动

  • 有时,我希望跨地理位置查看数据(此维度存在于一些活动中)

  • 我必须设计RDD,使我的所有用例都能有效工作

    在任何给定的时间点,每项工作都将针对一项活动

    我有两个选择-

  • 为每个活动创建一个RDD,并跨该表中的维度对其进行分区。 因此,我将拥有与我的活动一样多的RDD。
    对于每个作业,我将访问特定的RDD并计算

  • 为所有活动创建一个RDD,并在某个维度上对其进行分区
    对于每个作业,我将访问单个大型RDD,并对该RDD执行活动筛选,并进行计算

  • 我的问题是,在给定用例和假设的情况下,哪个选项设计RDD更有效


    蒂亚

    单个RDD的优点是添加另一个活动类型(活动4)几乎不需要什么工作。单独的RDD的优点是,当您只想访问一种活动类型时,不必遍历其他类型的数据

    正如你在评论中所说:


    在UI上,将显示所有活动的数据。为了实现这一点,我们将运行多个作业(每个活动一个作业),并跨时间段计算它们的值


    如果您有N个活动类型和M个总记录,那么如果您有单独的RDD,您将通过M个记录来呈现UI。如果您有一个RDD,您将查看N×M记录。

    “有时我想查看所有活动的跨时段数据”与“每个作业将满足一个单一活动”。这不是矛盾吗?在UI上,将显示所有活动的数据。为了实现这一点,我们将运行多个作业(每个活动一个作业)并跨时间段计算它们的值?什么不起作用?还是应该做得更好?这些用例足够简单,可以快速原型化和比较实现。Spark shell是您的朋友:我想设计讨论不太适合堆栈溢出。我们永远不会有完整的上下文,也永远无法为您运行基准测试。但在这种情况下,我认为答案是非常明确的,所以我添加了它。(我认为单独的RDD无疑会更有效。)感谢Daniel Darabos验证了多个RDD比使用一个大的RDD更好。因为在运行时添加活动非常罕见,所以在这种情况下多个RDD是正确的选择。谢谢