如何使用Pyspark组合两个Dstream(类似于普通RDD上的.zip)

时间:2016-05-26 16:27:13

标签: apache-spark zip streaming pyspark dstream

我知道我们可以在pyspark中将两个RDD组合在一起(如R中的cbind):

rdd3 = rdd1.zip(rdd2)

我想在pyspark中为两个Dstream执行相同的操作。是可能还是其他选择?

事实上,我正在使用MLlib随机森林模型来预测使用火花流。 最后,我想结合功能Dstream&预测Dstream一起进行进一步的下游处理。

提前致谢。

-Obaid

1 个答案:

答案 0 :(得分:2)

最后,我在下面使用。

诀窍是使用“原生python地图”和“火花尖叫变换”。 可能不是一种优雅的方式,但它有效:)。

def predictScore(texts, modelRF):
    predictions = texts.map( lambda txt :  (txt , getFeatures(txt)) ).\
     map(lambda (txt, features) : (txt ,(features.split(','))) ).\
     map( lambda (txt, features) : (txt, ([float(i) for i in features])) ).\
     transform( lambda  rdd: sc.parallelize(\
       map( lambda x,y:(x,y), modelRF.predict(rdd.map(lambda (x,y):y)).collect(),rdd.map(lambda (x,y):x).collect() )\
       )\
     )
    # in the transform operation: x=text and y=features
    # Return will be tuple of (score,'original text')
    return predictions

希望,它会帮助那些面临同样问题的人。 如果有人有更好的想法,请在这里发布。

-Obaid

注意:我也在spark用户列表中提交了问题,并在那里发布了我的答案。