我确信这很简单,但尽管通过尝试和研究我找不到解决方案。我在这里处理航班信息。
我的内容为:
[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])
答案 0 :(得分: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) - 返回一个只包含满足谓词的元素的新RDD。
其中map
通过将函数应用于此RDD的每个元素来返回新的RDD,这就是您所需要的。
我建议您阅读PythonRDD API文档here以了解有关它的更多信息。