Python 在pyspark中使用foreachRDD和foreach迭代rdd

Python 在pyspark中使用foreachRDD和foreach迭代rdd,python,apache-spark,pyspark,Python,Apache Spark,Pyspark,关于Spark 1.6.1的问题,pyspark 我有像这样的流数据进来 {"event":4,"Userid":12345,"time":123456789,"device_model":"iPhone OS", "some_other_property": "value", "row_key": 555} 我有一个写入HBase的函数,名为writeToHBase(rdd),它需要一个具有以下结构的元组的rdd: (rowkey, [rowkey, column-family, key,

关于Spark 1.6.1的问题,pyspark

我有像这样的流数据进来

{"event":4,"Userid":12345,"time":123456789,"device_model":"iPhone OS", "some_other_property": "value", "row_key": 555}
我有一个写入HBase的函数,名为writeToHBase(rdd),它需要一个具有以下结构的元组的rdd:

(rowkey, [rowkey, column-family, key, value])
从输入格式可以看出,我必须获取原始数据集并迭代所有键,使用send函数调用发送每个键/值对

阅读spark streaming编程指南中的“使用foreachRDD的设计模式”一节

似乎建议在数据集外部执行某些操作时使用foreachRDD。在我的例子中,我希望通过网络将数据写入HBase,因此我在流数据上使用foreachRDD,并调用处理发送数据的函数:

stream.foreachRDD(lambda k: process(k))
我对spark函数的理解目前相当有限,因此我无法找到一种方法来迭代我的原始数据集以使用我的write函数。如果它是python iterable,我可以这样做:

def process(rdd):
    for key, value in my_rdd.iteritems():
        writeToHBase(sc.parallelize(rowkey, [rowkey, 'column-family', key, value]))
其中rowkey可以通过在rdd本身中查找来获得

rdd.map(lambda x: x['rowkey'])

如何完成process()在pyspark中的作用?我看到一些示例使用foreach,但我不太能够让它实现我想要的功能。

为什么要迭代rdd,而writeToHBase函数需要rdd作为参数。只需在流程函数中调用
writeToHBase(rdd)
,就可以了

如果需要从rdd中获取每条记录,可以调用

def processRecord(record):
        print(record)   
rdd.foreach(processRecord)
在processRecord函数中,您将获得要处理的单个记录