为什么当我比较RDDpipeline的int值时,我得到int和none值?

时间:2016-07-21 09:48:22

标签: python apache-spark rdd nonetype

我有一个csv文件,其中包含值为10的字段。使用pyspark我想只捕获特定字段中1的那些值。当我转换字段时,我将它们转换为int。当我使用if语句检查值是否为1时,它会返回很多None和一些1。为什么我有这个问题?我100%确定我的csv文件只包含值10

def vehA(line):
  fields = line.split(",")
  ddsA = int(fields[28]) 
  ddsB = int(fields[52]) 

  if ddsA == 1:
     return ddsA

rdd = lines.map(vehA)
rdd.collect()

输出:

1
1
1
1
1
1
1
None
None
None
None
1
1
1
1
1
1
None
None
...

我甚至试过这个,我仍然得到相同的输出:

    if ddsA is not None:
        if ddsA == 1 and ddsA is not None:
          return ddsA

1 个答案:

答案 0 :(得分:2)

vehA不等于None时,您的方法ddsA会返回1,因为在else python隐式返回{None时,您没有返回任何内容1}}。

为了仅使用一个捕获ddsA,您可以使用过滤器而不是地图。