如何 return pyspark RDD 中每一行的单个字段?

How to return a single field from each line in a pyspark RDD?

我相信这很简单,但尽管经过尝试和研究,我还是找不到解决方案。我正在处理这里的航班信息。

我有一个内容为 :

的 rdd
[u'2007-09-22,9E,20363,TUL,OK,36.19,-95.88,MSP,MN,44.88,-93.22,1745,1737,-8,1953,1934,-19', u'2004-02-12,NW,19386,DEN,CO,39.86,-104.67,MSP,MN,44.88,-93.2
2,1050,1050,0,1341,1342,1', u'2007-05-07,F9,20436,DEN,CO,39.86,-104.67,MSP,MN,44.88,-93.22,1030,1040,10,1325,1347,22']

我需要什么转换才能创建一个包含所有第二个字段的新 RDD。

[u'9E',u'NW',u'F9']

我试过过滤但无法正常工作。这只给了我整行,我只想要每行的第二个字段。

new_rdd = current_rdd.filter(lambda x: x.split(',')[1]) 

解决方法如下:

data = [u'2007-09-22,9E,20363,TUL,OK,36.19,-95.88,MSP,MN,44.88,-93.22,1745,1737,-8,1953,1934,-19', u'2004-02-12,NW,19386,DEN,CO,39.86,-104.67,MSP,MN,44.88,-93.22,1050,1050,0,1341,1342,1', u'2007-05-07,F9,20436,DEN,CO,39.86,-104.67,MSP,MN,44.88,-93.22,1030,1040,10,1325,1347,22']
current_rdd = sc.parallelize(data)
rdd = current_rdd.map(lambda x : x.split(',')[1])
rdd.take(10)
# [u'9E', u'NW', u'F9']

您将 filter 用于错误的目的。那么让我们回顾一下 filter 函数的定义:

filter(f) - Return a new RDD containing only the elements that satisfy a predicate.

其中 map returns 通过对这个 RDD 的每个元素应用一个函数来创建一个新的 RDD,这就是你所需要的。

我建议阅读 PythonRDD API 文档 here 以了解更多信息。