我在cassandra中有一些数据,数据模型如下:
transaction_id : uuid
start_date: timestamp
end_date: timestamp
PRIMARY KEY(transaction_id)
现在我想把这些数据转换成:
aggregation_date : timestamp
number_of_active_transaction_0 : int
number_of_active_transaction_1 : int
number_of_active_transaction_2 : int
...
number_of_open_transaction_23 : int
PRIMARY KEY((aggregation_date))
目前,我已经创建了一个函数,该函数接受开始和结束日期,并返回transaction_date(只是日期部分)的元组和24大小的数组,其值为1,用于事务活动时的小时,并将原始RDD映射为具有transaction_date(只是日期部分)的PairRDD作为键和数组作为值。在此之后,对键执行reduce并添加数组的所有单个元素,以获得所需的输出。
现在的问题是,有些情况下,当事务在深夜开始并在午夜后完成时,所以在这种情况下,我想从我的函数返回2行,以便对于每个事务,我在返回的RDD中得到2行。
Spark版本:1.2.2
使用的API是Scala
Spark Cassandra connector version 1.2.2
您可能想要使用flatMap
,使用flatMap
您可以为每个输入输出多个(包括零)元素。
然而,你也提到你正在对键执行减少,如果在这个阶段,当你需要输出多个元素时,你可以在reduceByKey
期间生成一个列表,然后只做一个身份flatMap
,这将使所有结果变平。